以更加Rubyish的方式获得2d数组最大值?

时间:2010-08-29 05:33:15

标签: ruby block max

后台:在Ruby中,我有一个像下面这样的二维数组:

count[[english_word, french_word]] = ...
pp count
{["my", "une"]=>0.0,
 ["my", "voiture"]=>0.2,
 ["red", "maison"]=>0.9,
...
}

(之所以我这样做而不是count[english_word][french_word]是因为我不知道如何绕过Undef错误,我在Stack Overflow上看到了这个语法建议)

我使用所有单词的english_vocabfrench_vocab数组填充了一对嵌套循环的数据结构。

问题:我希望能够获得给定英语单词的最大值。

english_word = 'foo'
max_count = 0
french_vocab.each do |french_word|
   count = count[[english_word, french_word]]
   if count > max_count
       max_count = count
   end
end

我可以通过一个简单的嵌套for循环来做到这一点,但我想知道是否有更好的Ruby-ish方法做同样的事情?

1 个答案:

答案 0 :(得分:2)

我认为这比你想象的容易得多。

hash = {
  ["my", "une"]=>0.0,
  ["my", "voiture"]=>0.2,
  ["red", "maison"]=>0.9,
}

puts hash.find_all{|a| a[0][0] == 'my' }.max[1]