Опции количества строк - PullRequest
46 голосов
/ 15 марта 2011

Из документации для String#count Я понимаю первый пример, но не понимаю остальных примеров:

a = "hello world"
a.count "lo"            #=> 5
a.count "lo", "o"       #=> 2
a.count "hello", "^l"   #=> 4
a.count "ej-m"          #=> 4

Любое объяснение будет полезно.

Ответы [ 6 ]

72 голосов
/ 14 сентября 2012

Это один из самых грязных рубиновых методов и довольно паршивая документация для загрузки. Бросил меня за петлю. В итоге я посмотрел на него, потому что он выглядел так, как будто он должен подсчитать количество вхождений данной строки. Нету. Не удаленно близко. Но вот как я закончил считать строковые вхождения:

s="this is a string with is thrice"
s.scan(/is/).count  # => 3

Заставляет меня задуматься, почему кто-то спросил этот метод, и почему документация такая паршивая. Почти как человек, документирующий код, на самом деле не имел ни малейшего представления о понятной человеку «деловой» причине для запроса этой функции.

count([other_str]+) → fixnum

Каждый параметр _other_str_ определяет набор символов для подсчета. пересечение этих множеств определяет символы для подсчета в ул. любой _other_str_, начинающийся с каретки (^), отменяется. Последовательность c1–c2 означает все символы от c1 до c2.

36 голосов
/ 15 марта 2011

Если вы передадите более 1 параметра для подсчета, он будет использовать пересечение этих строк и будет использовать его в качестве цели поиска:

a = "hello world"
a.count "lo"            #=> finds 5 instances of either "l" or "o"
a.count "lo", "o"       #=> the intersection of "lo" and "o" is "o", so it finds 2 instances
a.count "hello", "^l"   #=> the intersection of "hello" and "everything that is not "l" finds 4 instances of either "h", "e" or "o"
a.count "ej-m"          #=> finds 4 instances of "e", "j", "k", "l" or "m" (the "j-m" part)
10 голосов
/ 15 марта 2011

Давайте разберемся с ними

a = "hello world"
  1. для подсчета количества вхождений букв l и o

    a.count "lo" #=> 5

  2. , чтобы найти пересечение lo и o (которое подсчитывает количество вхождений l и o и берет только число o из вхождений):

    a.count "lo", "o" #=> 2

  3. для подсчета количества вхождений h, e, l, l и o, а затем пересекаются с любыми, не являющимися l (что дает тот же результат для обнаружение случаев h, e и o)

    a.count "hello", "^l" #=> 4

  4. для подсчета количества вхождений e и любой буквы между j и m (j, k, l и m):

    a.count "ej-m" #=> 4

10 голосов
/ 15 марта 2011

Каждый аргумент определяет набор символов.Пересечение этих наборов определяет общий набор, который count использует для вычисления подсчета.

a = "hello world"

a.count "lo"            # l o       => 5
a.count "lo", "o"       # o         => 2

И ^ можно использовать для отрицания (все буквы в hello, кроме l)

a.count "hello", "^l"   # h e o     => 4

Диапазоны могут быть определены с помощью -:

a.count "ej-m"          # e j k l m => 4
3 голосов
/ 26 октября 2018

Использование gsub в строке

a = "hello world hello hello hello hello world world world"
2.1.5 :195 > a.gsub('hello').count
=> 5 
2 голосов
/ 15 марта 2011

Я возьму удар:

Второй пример: используя формулировку «Пересечение этих наборов определяет символы для подсчета в str», параметры - «lo» и «o». Их пересечение - просто «o», из которых на строку рассчитывают 2. Отсюда возвращаемое значение 2.

Третий пример: этот, кажется, говорит: «Любой из символов« привет », но не символ« l »» ». Получаем это из строки «Любой other_str, начинающийся с каретки (^), отменяется». Таким образом, вы можете посчитать набор букв, содержащихся в строке «hello», которые находятся в «hello world» (т. Е. H, e, l, l, o, o, l), но затем сравнить пересечение с набором "^l" (т.е. h, e, o, w, o, r, d) у вас осталось 4 (то есть h, e, o, o).

Четвертый пример: этот в основном говорит "посчитайте все символы 'e' и любой символ между 'j' и" m ". Между" j "и" m "и всеми содержатся один символ" e "и 3 3 случается, что это буква «л», которая снова дает нам ответ 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...