【问题标题】:How to add two multidimensional arrays如何添加两个多维数组
【发布时间】:2014-04-10 12:38:22
【问题描述】:

我想做以下事情:

array1 = [[1, 10], [2, 20], [3, 10], [4, 30]]
array2 = [[1, 10], [2, 10], [3, 5], [4, 10]]

我想添加两个数组,以便添加每个子数组的第二个元素。我想要以下输出。

result = [[1,20],[2,30],[3,15],[4,40]]

【问题讨论】:

    标签: arrays ruby multidimensional-array


    【解决方案1】:

    这可以通过Array#zipArray#map 的组合来实现:

    result = array1.zip(array2).map { |l, r| [l[0], l[1] + r[1]] }
    #=> [[1, 20], [2, 30], [3, 15], [4, 40]]
    

    但是,键值对通常最好被视为Hash。在其他操作中,这将允许您 #merge:

    hash1
    #=> {1=>10, 2=>20, 3=>10, 4=>30}
    hash2
    #=> {1=>10, 2=>10, 3=>5, 4=>10}
    result = hash1.merge(hash2) { |_, l, r| l + r }
    #=> {1=>20, 2=>30, 3=>15, 4=>40}
    

    【讨论】:

    • 如何使用带有字符串的多维数组来做到这一点?
    • 同理。试试看!
    【解决方案2】:

    另一种方法如下:

    array1 = [[1,10],[2,20],[3,10],[4,30]]
    array2 = [[1,10],[2,10],[3,5],[4,10]]
    
    Hash[array1].merge(Hash[array2]) { |key,old,new| old + new }.to_a
    # => [[1, 20], [2, 30], [3, 15], [4, 40]]
    

    merge(other_hash){|key, oldval, newval| block}的帮助下。

    【讨论】:

    • OP 的代码有异味。一开始就应该是数组。
    • 我是说 OP 应该将它们作为哈希值。 OP 将它们制作为数组看起来不正确。然后,您不需要在哈希之间进行转换。
    【解决方案3】:
    [array1, array2].transpose.map{|(k, v1), (_, v2)| [k, v1 + v2]}
    # => [[1, 20], [2, 30], [3, 15], [4, 40]]
    

    【讨论】:

    • 喜欢解决方案+1
    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2019-05-30
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多