这是我现在使用的代码片段:
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
有没有Ruby功能可以做到这一点?任何功能等同?还是更好的?
答案 0 :(得分:9)
如果a和b是字符串:
b.scan(a).length
答案 1 :(得分:4)
最明显的方式
enum.find_all {| obj | block } => array
加
array.length
或者你可以用折叠
来做enum.inject {| memo, obj | block } => obj
答案 2 :(得分:3)
我假设b
是一个数组,b
是要在数组中查找的对象。
ary = ["foo", "bar", "baz", "foo", "foo", "maz"]
look_for = "foo"
p a.detect {|i| i == look_for }.length
# => 3
您也可以将其修补为Array
。
class Array
def occurrences_of(object)
detect {|i| i == object }.length
end
end
p ["foo", "bar", "baz", "foo", "foo", "maz"].occurrences_of("foo")
# => 3
答案 3 :(得分:-2)
您只需要使用每个循环遍历数组,然后通过它创建一个键为“a”的数组并计为值。然后返回计数。
def count_occurences(a, b)
r = Array.new
b.eachdo |e|
if e == a
r[e]++
end
end
end
应该这样做!