2012-04-02 1 views
1

Я получил несортированный массив ключей, как это:Объединения массива ключей хеша с ключевыми парами значений, как первенствует ВПР

keys = ["ccc", "ddd", "ggg", "aaa", "bbb"] 

и хэш

hash = {"ddd" => 4, "aaa" => 1, "bbb" => 2, "eee" => 5, "fff" => 6} 

Я бы хотел бы присоединиться к этим двум структурам данных возвращать хэш в первоначальном порядке ключей для первых ключей:

{"ccc" => nil, "ddd" => 4, "ggg" => nil, "aaa" => 1, "bbb" => 2} 

НЕ элементов в хэш (Лик e "ggg") должен возвращать нуль. Это аналогично функции «v-lookup» в excel. это в рубине. Благодаря!

+0

В ожидаемом хэша, почему "ссс" 3, а не ноль? Почему «ddd» 4, а не 3? –

+0

потому что я написал этот вопрос без достаточного количества кофеина. следует исправить сейчас. – hagope

ответ

4

Cryptic:

Hash[keys.zip(hash.values_at *keys)] 

Или немного больше, немного меньше маскировочная:

keys.map.with_object({}) {|key, memo| memo[key] = hash[key]} 
+1

+1 для функционального решения. Я бы не назвал это загадочным, он точно описывает, что он делает. – tokland

+0

Что делать, если вместо хэша у меня есть массив хэша: [{"ddd" => 4}, {"aaa"} => 1 ...] работает ли это решение? – hagope

+0

Почему у вас такая глупая структура данных? Просто сопоставьте его с массивом 'keys'. – Reactormonk

Смежные вопросы