ruby-String#count选项

String#count的文档中,我理解了第一个示例,但我不理解其余示例:

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

任何解释都会有所帮助。

Nick Vanderbilt asked 2020-02-19T14:46:06Z
6个解决方案
73 votes

这是最笨拙的红宝石方法之一,也是启动时非常糟糕的文档。 把我扔了一圈。 我最终看了一下它,因为它看起来应该可以让我计算给定字符串的出现次数。 不。 没有远程关闭。 但是,这是我最终计数字符串出现次数的方式:

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

让我想知道为什么有人要求这种方法,以及为什么文档如此糟糕。 几乎像编写该代码的人员那样,对于要求该功能的人为理解的“业务”原因确实一无所知。

^

每个_other_str_参数定义一组要计数的字符。 的   这些集合的交集定义要计入str的字符。 任何   以插入号(^)开头的_other_str_被否定。 序列c1–c2   表示介于c1c2之间的所有字符。

Jon Kern answered 2020-02-19T14:46:35Z
36 votes

如果传递多个参数进行计数,它将使用这些字符串的交集并将其用作搜索目标:

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)
edmz answered 2020-02-19T14:46:56Z
10 votes

让我们分解一下

a = "hello world"
  1. 计算字母a.count "ej-m" #=> 4j的出现次数

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

  2. 查找a.count "ej-m" #=> 4j的相交(正在对mj的出现次数进行计数,并仅从出现的次数中获取k的计数):

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

  3. 计算a.count "ej-m" #=> 4jmjk的出现次数,然后与非l的相交(产生相同的结果以发现m、275458284158451818151和27545828415845

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

  4. 计算a.count "ej-m" #=> 4jm之间的任何字母的出现次数(jklm):

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

Russ Cam answered 2020-02-19T14:47:52Z
10 votes

每个参数定义一组字符。 这些集合的交集确定了-用于计算计数的总体集合。

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
FMc answered 2020-02-19T14:48:21Z
4 votes

在字符串中使用gsub

a = "hello world hello hello hello hello world world world"
2.1.5 :195 > a.gsub('hello').count
=> 5 
Dyaniyal Wilson answered 2020-02-19T14:48:41Z
2 votes

我要刺一刺:

第二个示例:使用措辞“这些集合的交集定义要在str中计数的字符”,参数为“ lo”和“ o”。 这些的交集只是“ o”,其中所指的字符串中有2。 因此,返回值为2。

第三个示例:这个似乎在说:“'hello'中的任何字符,但不是'l'中的字符”。 从“否以尖号(^)开头的other_str”行中获取此值。 因此,您可以计算在“ hello world”中找到的字符串“ hello”中包含的字母集合(即h,e,l,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的答案。

Pete answered 2020-02-19T14:49:17Z
translate from https://stackoverflow.com:/questions/5305638/stringcount-options