字符串#count选项

时间:2011-03-14 22:59:05

标签: ruby string

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

任何解释都会有所帮助。

6 个答案:

答案 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   表示c1c2之间的所有字符。

答案 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"
  1. 计算字母lo

    的出现次数

    a.count "lo" #=> 5

  2. 查找loo的交叉点(计算lo的出现次数,并仅计算{{ 1}}来自事件):

    o

  3. 计算a.count "lo", "o" #=> 2hell的出现次数,然后与任何非o(与查找lhe的出现产生相同的结果

    o

  4. 计算a.count "hello", "^l" #=> 4的出现次数以及ej之间的任何字母(mj,{{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个答案。