如何以Ruby方式进行:计算b中出现a的次数

如何以Ruby方式进行:计算b中出现a的次数,ruby,Ruby,这是我现在使用的代码片段: def countOccurences(a, b) #counts the number of occurences of a in b count=0 cur=0 while cur < b.length do temp=b.index(a, cur) if temp == nil break end count=count+1 cur=temp+a.length end retur

这是我现在使用的代码片段:

def countOccurences(a, b)
  #counts the number of occurences of a in b 
  count=0
  cur=0
  while cur < b.length do
    temp=b.index(a, cur)
    if temp == nil
      break
    end
    count=count+1
    cur=temp+a.length
  end
  return count
end
def计数发生次数(a、b)
#统计a在b中出现的次数
计数=0
cur=0
而cur
有没有Ruby函数可以做到这一点?有功能上的等价物吗?还有更好的吗?

最明显的方法

enum.find_all {| obj | block } => array
加上

或者你可以只做一个折叠

enum.inject {| memo, obj | block } => obj

我假设
b
是一个数组,
b
是一个要在数组中查找的对象

ary = ["foo", "bar", "baz", "foo", "foo", "maz"]
look_for = "foo"

p a.detect {|i| i == look_for }.length
# => 3
您还可以将其修补到
数组中

class Array
  def occurrences_of(object)
    detect {|i| i == object }.length
  end
end

p ["foo", "bar", "baz", "foo", "foo", "maz"].occurrences_of("foo")
# => 3

您只需要使用each循环数组,并通过该循环创建一个键为“a”的数组,并将其计为值。然后返回计数

def count_occurences(a, b)
  r = Array.new
  b.eachdo |e|
    if e == a 
      r[e]++
    end
  end
end

那就够了

如果a和b是字符串:

b.scan(a).length b、 扫描(a).长度
a和b是字符串吗?你可能想在问题中说明这一点。是的。很抱歉错过了。@Jasim:那么你应该接受James的回答,这样他(和你)就可以得到学分了。事实上,更好的答案是b。计算(a)这个答案有几个错误:a)你在“每个”和“做”之间缺少了一个空格。b) Ruby没有
++
运算符。c) 该方法的返回值将始终为
b
——您可能希望返回
r[a]
。c)
r[e]
仅当e是整数时才起作用,因此a必须是整数才能起作用。d) 注意,r的元素将被初始化为nil,而不是0,因此只有在您首先初始化为0时,递增才有效。e) 因为当e==a时,你只能访问
r[e]
,所以你只能访问r的一个索引,这样你就可以用一个整数而不是数组进行计数了。@Steve:我得研究一下枚举。谢谢你的提示。 b.scan(a).length