Параметры подсчета строк #
В документации для String#count
я понимаю первый пример, но я не понимаю остальных примеров:
a = "hello world"
a.count "lo" #=> 5
a.count "lo", "o" #=> 2
a.count "hello", "^l" #=> 4
a.count "ej-m" #=> 4
Любое объяснение будет полезно.
Ответы
Ответ 1
Это один из самых удобных рубиновых методов, и очень грубая документация для загрузки. Бросил меня за петлю. Я закончил тем, что посмотрел на него, потому что он выглядел так, как будто он должен подсчитывать количество вхождений данной строки. Неа. Не удаленно закрыть. Но вот как я закончил подсчет строк:
s="this is a string with is thrice"
s.scan(/is/).count # => 3
Заставляет меня задаться вопросом, почему кто-то попросил этот метод, и почему документация настолько отвратительна. Почти как человек, документирующий код, действительно не имел понятия о понятной для бизнеса "деловой" причине для запроса этой функции.
count([other_str]+) → fixnum
Каждый параметр _other_str_ определяет набор символов для подсчета. пересечение этих множеств определяет символы для подсчета на str. Любые _other_str_, начинающийся с каретки (^
), отрицается. Последовательность c1–c2
означает все символы между c1
и c2
.
Ответ 2
Если вы перечислите более одного параметра для подсчета, он будет использовать пересечение этих строк и будет использовать это как цель поиска:
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)
Ответ 3
Позвольте сломать их вниз
a = "hello world"
-
чтобы подсчитать количество вхождений букв l
и o
a.count "lo" #=> 5
-
чтобы найти пересечение lo
и o
(которое подсчитывает количество вхождений l
и o
и принимает только количество o
из вхождений):
a.count "lo", "o" #=> 2
-
чтобы подсчитать количество вхождений h
, e
, l
, l
и o
, затем пересечься с любым, не являющимся l
(что дает тот же результат нахождение вхождения h
, e
и o
)
a.count "hello", "^l" #=> 4
-
чтобы подсчитать количество вхождений e
и любую букву между j
и m
(j
, k
, l
и m
):
a.count "ej-m" #=> 4
Ответ 4
Каждый аргумент определяет набор символов. Пересечение этих наборов определяет общий набор, который 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
Ответ 5
Я возьму удар:
Второй пример: с использованием формулировки "Пересечение этих множеств определяет символы для подсчета в str", параметры "lo" и "o". Их пересечение - это "o", из которых в строке подсчитываются 2. Следовательно, возвращаемое значение 2.
Третий пример: Кажется, это говорит: "Любой из символов" привет ", но не символ" l ". Получение этого из строки" Any 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 ". Существует один" e "и 3 символа между" j "и" m "и все 3 - это буква" l", которая снова дает нам ответ 4.