怎么做Ruby方式:数不。 b的出现

时间:2009-09-09 07:25:37

标签: 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
  return count
end

有没有Ruby功能可以做到这一点?任何功能等同?还是更好的?

4 个答案:

答案 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

应该这样做!