从documentation for String#count
我理解第一个例子,但我不理解其余的例子:
a = "hello world"
a.count "lo" #=> 5
a.count "lo", "o" #=> 2
a.count "hello", "^l" #=> 4
a.count "ej-m" #=> 4
任何解释都会有所帮助。
答案 0 :(得分:71)
这是最愚蠢的ruby方法之一,并且启动时非常糟糕的文档。扔了一圈。我最终看着它,因为它看起来应该给我一个给定字符串出现次数。不。不是远程关闭。但这是我最终计算字符串出现的方式:
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
之间的所有字符。
答案 1 :(得分:36)
如果您将多个参数传递给count,它将使用这些字符串的交集并将其用作搜索目标:
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)
答案 2 :(得分:10)
每个参数定义一组字符。这些集合的交集决定了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 :(得分:10)
让我们打破这些
a = "hello world"
计算字母l
和o
a.count "lo" #=> 5
查找lo
和o
的交叉点(计算l
和o
的出现次数,并仅计算{{ 1}}来自事件):
o
计算a.count "lo", "o" #=> 2
,h
,e
,l
和l
的出现次数,然后与任何非o
(与查找l
,h
和e
的出现产生相同的结果
o
计算a.count "hello", "^l" #=> 4
的出现次数以及e
和j
之间的任何字母(m
,j
,{{1} }和k
):
l
答案 4 :(得分:3)
在字符串中使用gsub
a = "hello world hello hello hello hello world world world"
2.1.5 :195 > a.gsub('hello').count
=> 5
答案 5 :(得分:2)
我会采取刺:
第二个例子:使用措辞“这些集合的交集定义了要在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恰好是字母“l”,它再次给我们4个答案。