【问题标题】:How to merge the contents of arrays of hashes (keys and contents) in Ruby如何在 Ruby 中合并哈希数组(键和内容)的内容
【发布时间】:2009-11-05 10:23:46
【问题描述】:
myArray = [{"papers"=>[[1,2,3],[1,3,2]], "value"=>"1"},
           {"papers"=>[[2,1,3],[2,3,1]], "value"=>"1"}, 
           {"papers"=>[[1,2,3],[1,3,2]], "value"=>"0.5"}]

我需要根据每个包含数组的“值”来合并内容,这样我最终会得到这样的结果:

myArray = [{"papers"=>[[1,2,3],[1,3,2],[2,1,3],[2,3,1]], "value"=>"1"}, 
           {"papers"=>[[1,2,3],[1,3,2]], "value"=>"0.5"}]

我将如何以 Ruby 方式执行此操作?

我考虑过迭代数组,并根据值创建一个新数组,但我一直纠结于如何定义要复制的内容。

【问题讨论】:

  • 想过只创建一个像 "1" => [...], "0.5" => [...] 这样的哈希?如果数组中没有任何额外的属性,这会使两者的合并变得容易得多。
  • 是的,我能做到,Edwin,你能证明这有什么帮助吗?

标签: ruby arrays hash


【解决方案1】:
>> myArray = [{"papers"=>[[1,2,3],[1,3,2]], "value"=>"1"},
?>            {"papers"=>[[2,1,3],[2,3,1]], "value"=>"1"}, 
?>            {"papers"=>[[1,2,3],[1,3,2]], "value"=>"0.5"}]

>> hash = Hash.new {|h,k| h[k] = []}

>> myArray.each {|entry| hash[entry['value']] += entry['papers']}

>> hash
=> {"1"=>[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]], "0.5"=>[[1, 2, 3], [1, 3, 2]]}

>> hash.map {|k,v| {"value" => k, "papers" => v}}
=> [{"value"=>"1", "papers"=>[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]]}, {"value"=>"0.5", "papers"=>[[1, 2, 3], [1, 3, 2]]}]

【讨论】:

  • 谢谢你,Martin - 那是正确的。
猜你喜欢
  • 2015-05-31
  • 1970-01-01
  • 2014-07-24
  • 2015-06-13
  • 1970-01-01
  • 2014-07-16
  • 2010-10-14
  • 2018-07-29
  • 2021-02-05
相关资源
最近更新 更多