如何以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