Массив к хешу пар значения ключа в рубине

Да, существуют специальные серверные комментарии:

<%-- Text not sent to client  --%>
5
задан Christopher 2 December 2009 в 21:23
поделиться

3 ответа

Следующий подход является достаточно компактным, но все же читаемым:

def join_rows(rows, key_column, value_column)
  result = {}
  rows.each { |row| result[row[key_column]] = row[value_column] }
  result
end

Использование:

>> rows = [{:id => 1, :name => 'first'}, {:id => 2, :name => 'second'}, {:id => 3, :name => 'third'}]
>> join_rows(rows, :name, :id)
=> {"third"=>3, "second"=>2, "first"=>1}

Или, если вам нужен однострочник:

>> rows.inject({}) { |result, row| result.update(row[:name] => row[:id]) }
=> {"third"=>3, "second"=>2, "first"=>1}
5
ответ дан 13 December 2019 в 19:28
поделиться

Вы можете сделать это в одной строке с помощью inject :

a = [{:id => 1, :name => 'first'}, {:id => 2, :name => 'second'}, {:id => 3, :name => 'third'}]
a.inject({}) { |sum, h| sum.merge({ h[:name] => h[:id]}) }
# => {"third" => 3, "second" => 2, "first" => 1}
6
ответ дан 13 December 2019 в 19:28
поделиться
o = Hash.new
a = [{:id => 1, :name => 'first'}, {:id => 2, :name => 'second'}, {:id => 3, :name => 'third'}]
a.each {|h| o[h[:name]] = h[:id] }

puts o #{'third' => 3, 'second' => 2, 'first' => 1}
0
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: