2010-08-29 4 views
2

фона: В Ruby У меня есть 2d массив вроде следующего:Получение массива 2d в более рубиновом стиле?

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, и я увидел, этот синтаксис, предложенный для переполнения стека)

Я заполнил структуру данных парой вложенных циклов с использованием массивов english_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 

Я могу сделать это с простым вложенным для цикла, но мне интересно, если есть лучше Руби-иш способ сделать то же самое?

+0

Что означает 'count'? –

+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] 
+0

Это работает очень хорошо. Благодаря! –