Ruby Shoes:计算数组中值发生的次数

时间:2012-05-13 09:13:40

标签: ruby arrays indexing duplicates shoes

我正在使用Shoes在Ruby中制作Yahtzee游戏 当我单击按钮“两个”时,代码被认为是计算的次数 值2出现在数组中。对于出现的值2的每个实例, 分数增加2。

此代码适用于一定数量的案例,但适用于其他情况 @array = [2,1,2,2,3]#数组中有三个2 分数假设是6,但我的代码返回4 ...为什么?

button "      twos     " do     
    @array.each_with_index do |value, index|
        if (@array[index] == 2)
            @score = @score + 2
            @points = @score + 2
        end #if     
end #loop end #button

2 个答案:

答案 0 :(得分:6)

这段代码看起来更好,但事实上,它做了同样的事情。也许您应该检查实例变量@score@points的初始值?

@array = [2,1,2,2,3]

@score = @points = 0

@score = @array.count(2) * 2
@points = @score

@score
 => 6 
@points
 => 6

答案 1 :(得分:0)

我建议您使用Enumerable#inject方法。通过注入,您可以实现抽象方法来计算数字并在项目的任何地方使用它:

def count_of_element array, element
  array.inject(0) { |count, e| count += 1 if e == element; count }
end

puts count_of_element [2,1,2,2,3], 2 # => 3

可能有更好的解决方案 - 为这样的Array类定义方法:

class Array
  def count_of_element element
    inject(0) { |count, e| count += 1 if e == element; count }
  end
end

puts [2,1,2,2,3].count_of_element 2 # => 3

看起来更酷。祝你好运!