2013-07-23 1 views
0

У меня есть вложенный хэш внутри набора, в моем приложении rails, и я пытаюсь получить доступ ко всем значениям одного ключа перечислимым способом.В наборе хэшей, как получить доступ ко всем элементам одного ключа в качестве перечислимого объекта?

Так у меня есть набор, который выглядит следующим образом (а не фактические имена моих ключей и значений)

my_set=[{:foo=>"lion", :boolean1=>true, :boolean2=>false, :boolean3=>true}, 
     {:foo=>"monkey", :boolean1=>false, :boolean2=>true, :boolean3=>true}, 
     {:foo=>"elephant", :boolean1=>false, :boolean2=>true, :boolean3=>true} 
     ] 

Я хочу, чтобы иметь возможность перебрать все значения обув. Есть ли лучший способ сделать это, чем следующим образом?

foo_array=[] 
my_set.each do |hash| 
    foo_array<<hash[:foo] 
end 

Я не смог найти что-либо на доступ все значения: обув в моем наборе, только на доступ к отдельным элементам в вложенных перечислимых, которые я знаю, как это сделать. Спасибо.

ответ

2

Я думаю, что самый простой способ будет таким:

foo_array = my_set.map { |hash| hash[:foo] } 
1

Во-первых, ваше определение my_set не является действительным.

Закрепление, что я хотел бы использовать:

my_set=[ 
    {:foo=>"lion", :boolean1=>true, :boolean2=>false, :boolean3=>true}, 
    {:foo=>"monkey", :boolean1=>false, :boolean2=>true, :boolean3=>true}, 
    {:foo=>"elephant", :boolean1=>false, :boolean2=>true, :boolean3=>true} 
] 

foo_array = my_set.map{ |h| h[:foo] } # => ["lion", "monkey", "elephant"] 

Ваш код работает отлично, хотя тоже:

foo_array=[] 
my_set.each do |hash| 
    foo_array<<hash[:foo] 
end 
foo_array # => ["lion", "monkey", "elephant"] 

Это просто другой способ сделать это.

+0

Спасибо. На самом деле это не то, как я объявляю набор, набор объявляется с помощью Set.new, а затем хеши объединяются в него, итерации по другому массиву. Я пытался представить, как набор заканчивается, когда мне нужно получить foo из него. Я думаю, что картографическая версия лучше, потому что это меньше кода для одной и той же вещи. – ctaymor

+0

Очень важно, чтобы вы точно указали, как вы определяете свои данные. Использование набора имеет побочные эффекты и последствия, которых нет для массивов. Я не уверен, почему вы используете Set, хотя, поскольку он не собирается вас покупать. –

+0

хорошо, спасибо. Я отредактировал вопрос, чтобы сделать это более ясным, и постараюсь учесть это в памяти в будущем. Я довольно новичок в этом. Я использую Set вместо Array, потому что я хочу, чтобы его побочный эффект не позволял дублировать. Я не хочу дублировать свой хэш. Набор заполняется при итерации по массиву, в котором несколько элементов могут потенциально вставлять одну и ту же вещь в Set, если это массив. При наборе я получаю только одно появление каждого хэша в наборе. – ctaymor

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

  • Нет связанных вопросов^_^