string#计数选项

String#count的文档中我明白了第一个例子,但是我不明白其余的例子:

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

任何解释都会有帮助。

这是最低调的ruby方法之一,并且启动的文档非常糟糕。 扔我一个循环。 我结束了看它,因为它看起来应该给我一个给定的string出现次数。 不。 不是远程closures。 但是这里是我如何计算string出现的结果:

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

让我想知道为什么有人要求这种方法,以及为什么文档如此糟糕。 几乎就像logging代码的人真的不知道要求这个特性的人可以理解的“商业”原因。

count([other_str]+) → fixnum

每个_other_str_参数定义一组要计数的字符。 这些集合的交集定义了要在str中计数的字符。 任何以^开头的_other_str_都将被否定。 序列c1–c2表示c1c2之间的所有字符。

如果您通过多个参数进行计数,则会使用这些string将用作search目标:

 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 "jm" part) 

我们来分解这些

 a = "hello world" 
  1. 计算字母lo的出现次数

    a.count "lo" #=> 5

  2. findloo的相交点(这是计算lo的出现次数,并且只从出现次数开始):

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

  3. 计算hello的出现次数,然后与任何不是l相交(产生相同的结果来找出heo出现次数)

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

  4. 计算jmjklm )之间的e和任何字母的出现次数:

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

每个参数定义了一组字符。 这些集合决定了count用来计算一个count的整体集合。

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

^可用于否定(所有字母在hello ,除了l

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

范围可以用-来定义

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

我会采取一个刺:

第二个例子:使用措辞“这些集合的交集定义str中的字符数”参数是“lo”和“o”。 这些正好是其中有两个string中的“o”。 因此,返回值2。

第三个例子:这个人似乎在说:“你好”中的任何字符,而不是“l”字符。 从行中获得“任何以^ ^开头的其他__str被否定”。 因此,您可以计算在“hello world”(即h,e,l,l,o,o,l)中find的string“hello”中包含的字母集合,然后将该交集与"^l" (即h,e,o,w,o,r,d)你留下了4(即h,e,o,o)。

第四个例子:这个主要是说“统计所有'e'字符和'j'和'm'之间的任何字符,在'j'和'm'之间有一个'e'和3个字符,成为字母'l',我们再次回答4。