ruby - 将键值对象数组转换为键值对象(ruby)

标签 ruby arrays hash

我有一个具有键属性和值属性的对象列表。

我想将它转换为一个对象,该对象包含以键和值命名的属性。

例子会让它更清楚...

这个

[{
    :key => "key1",
    :value => "value1"
  }, {
    :key => "key2",
    :value => "value2"
}]

应该变成这样:

{
  :key1 => "value1"
  :key2 => "value2"
}

我确信有一条线可以让它发生 谢谢

最佳答案

使用 Hash::[] , Array#map :

a = [{
    :key => "key1",
    :value => "value1"
  }, {
    :key => "key2",
    :value => "value2"
}]

Hash[a.map { |h| [h[:key], h[:value]] }]
# => {"key1"=>"value1", "key2"=>"value2"}

Hash[a.map { |h| h.values_at(:key, :value) }]
# => {"key1"=>"value1", "key2"=>"value2"}

Hash[a.map { |h| [h[:key].to_sym, h[:value]] }]
# => {:key1=>"value1", :key2=>"value2"}

a.each_with_object({}) {|h,g| g.update({h[:key].to_sym => h[:value]}) }
# => {:key1=>"value1", :key2=>"value2"}

关于ruby - 将键值对象数组转换为键值对象(ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25508999/

相关文章:

ruby-on-rails - 如何评估年、月和日的日期差异( ruby )?

python - 多处理通过共享内存传递字典数组

arrays - 创建行数组VBA

java - 没有 hashCode() 的 equals()

url - 在 URL 包含 '#' 的地址栏中按下 Enter 键时的行为

ruby - 在 Windows 上运行 ruby​​ gem

ruby - Minitest 测试 Resque::TermException 的救援 block

ruby 开始?不一致

c# - 检查数据库中的字符串以查看它是否包含数组中的项目

MySQL 触发器 - 在插入时创建随机哈希键