0

我想做的是这样的:

arr = %w(good bad great dull)
"Today was a #{arr.sample} day"

假设我想循环这 100 次并计算每个采样元素,并将计数器收集在单独的哈希或数组中,我该怎么做?使用散列或数组会更好吗?

就像是:

counter = []
arr.each { |el| counter << [el => 0] }

100.times do 
  el = arr.sample
  # lost here..
end

我想要的输出(数组或哈希):

["good" => 20, "bad" => 20, "great" => 40, "dull" => 20]

我还认为我的第一种思维方式有一个更优雅的解决方案。

4

2 回答 2

2

我认为你很接近。哈希非常有意义:

counter = Hash.new
arr.each { |el| counter[el] = 0  }

100.times do 
  counter[arr.sample] += 1
end
于 2012-06-17T03:44:56.657 回答
2

也许这就是你想要的?

arr = %w(good bad great dull)
counter = Hash.new(0)
100.times { counter[arr.sample] += 1 }
counter #=> {"great"=>22, "good"=>29, "bad"=>21, "dull"=>28}

你也可以这样做:

arr = %w(good bad great dull)
(1..100).each_with_object(Hash.new(0)) { |_, h| h[arr.sample] += 1 }
#=> {"great"=>22, "good"=>29, "bad"=>21, "dull"=>28}

这有点“自包含”,并返回哈希本身而不是100times这样(尽管您也可以使用它tap来获得这种效果)。

于 2012-06-17T03:45:53.637 回答