Chr*_*her 5 ruby ruby-on-rails
从返回表中所有值的模型中,如何将其转换为名称值对的哈希值
{column_value => column_value}
Run Code Online (Sandbox Code Playgroud)
例如
[{:id => 1, :name => 'first'}, {:id => 2, :name => 'second'}, {:id => 3, :name => 'third'}]
Run Code Online (Sandbox Code Playgroud)
to(指定:id和:name)
{'first' => 1, 'second' => 2, 'third' => 3}
Run Code Online (Sandbox Code Playgroud)
您可以在一行中执行以下操作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}
Run Code Online (Sandbox Code Playgroud)
以下方法相当紧凑,但仍然可读:
def join_rows(rows, key_column, value_column)
result = {}
rows.each { |row| result[row[key_column]] = row[value_column] }
result
end
Run Code Online (Sandbox Code Playgroud)
用法:
>> rows = [{:id => 1, :name => 'first'}, {:id => 2, :name => 'second'}, {:id => 3, :name => 'third'}]
>> join_rows(rows, :name, :id)
=> {"third"=>3, "second"=>2, "first"=>1}
Run Code Online (Sandbox Code Playgroud)
或者,如果你想要一个单行:
>> rows.inject({}) { |result, row| result.update(row[:name] => row[:id]) }
=> {"third"=>3, "second"=>2, "first"=>1}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3895 次 |
| 最近记录: |