【问题标题】:ruby on Rails: Merge 2 activerecord arraysruby on Rails:合并 2 个 activerecord 数组
【发布时间】:2011-09-15 13:40:40
【问题描述】:

我有 2 个数组,例如:

arr1 : {[:day => 12, :sum_src => 1234], [:day => 14, :sum_src => 24543]}
arr2 : {[:day => 12, :sum_dst => 4234], [:day => 14, :sum_dst => 342334]}

我想将这两个数组合并为一个,这样它看起来像:

arr3 : {[:day => 12, :sum_src => 1234, :sum_dst => 4234],[:day => 14, :sum_src => 24543, :sum_dst => 342334]}

有可能吗?以及如何做到这一点?

【问题讨论】:

  • 在我看来不像一个数组,哈希?
  • 我已经修复了我的第一条消息

标签: ruby-on-rails ruby arrays merge


【解决方案1】:

Riffing Qerub 的答案 - 如果数组按照示例中的方式排序 zip 可能是一个很好的工具:

arr1 = [{:day => 12, :sum_src => 1234}, {:day => 14, :sum_src => 24543}]
arr2 = [{:day => 12, :sum_dst => 4234}, {:day => 14, :sum_dst => 342334}]
arr1.zip(arr2).map {|a,b| a.merge!(b)}

结果

[{:day=>12, :sum_dst=>4234, :sum_src=>1234}, {:day=>14, :sum_dst=>342334, :sum_src=>24543}]

【讨论】:

    【解决方案2】:

    就像 Omar 指出的那样,这些是哈希值。如果你有两个哈希:

    h1 = { "a" => 100, "b" => 200 }
    h2 = { "b" => 254, "c" => 300 }
    h1.merge(h2)   #=> {"a"=>100, "b"=>254, "c"=>300}
    

    在你的情况下,如果你想合并到数组并删除重复,我会使用联合运算符:

    [ "a", "b", "c" ] | [ "c", "d", "a" ] #=> [ "a", "b", "c", "d" ]
    

    取自 Rails API。 祝你好运!

    【讨论】:

    • 未定义方法 `merge' for [#, #]:Array
    【解决方案3】:

    (你已经混淆了文字哈希和数组的语法,但无论如何......)

    这是一个简短但略显神秘的解决方案:

    arr1 = [{:day => 12, :sum_src => 1234}, {:day => 14, :sum_src => 24543}]
    arr2 = [{:day => 12, :sum_dst => 4234}, {:day => 14, :sum_dst => 342334}]
    
    result = (arr1 + arr2).inject({}) { |mem, x|
      (mem[x[:day]] ||= {}).merge!(x); mem
    }.values
    

    结果:

    [{:sum_dst=>4234, :day=>12, :sum_src=>1234}, {:sum_dst=>342334, :day=>14, :sum_src=>24543}]
    

    更易读的版本可能会有更明确的循环。 (留给读者作为练习。)

    【讨论】:

      猜你喜欢
      • 2012-11-20
      • 2011-01-21
      • 2022-11-16
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多