Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby-通过添加值组合两个数组_Ruby - Fatal编程技术网

Ruby-通过添加值组合两个数组

Ruby-通过添加值组合两个数组,ruby,Ruby,我有两个数组,每个数组都有许多数组元素。我想通过使用每个数组元素的第一个元素作为标识符来添加这两个元素,而添加第二个元素,例如: a1= [ [0,1], [1,5], [7,3] ] a2= [ [0,3], [3,2], [1,7] ] 因此,我希望(注意,输入数组可能不会以任何方式排序): 然后对结果进行排序。您可以这样做: (a + b).group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] } 首先

我有两个数组,每个数组都有许多数组元素。我想通过使用每个数组元素的第一个元素作为标识符来添加这两个元素,而添加第二个元素,例如:

a1= [ [0,1], [1,5], [7,3] ]
a2= [ [0,3], [3,2], [1,7] ]
因此,我希望(注意,输入数组可能不会以任何方式排序):


然后对结果进行排序。

您可以这样做:

(a + b).group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] }
首先将数组与+放在一起,因为不关心a和b,只关心它们的元素。然后,组_通过第一个元素对组合的数组进行分区,这样就可以轻松地处理内部数组。然后,您只需使用v.map(&:last)提取内部数组的第二个(或最后一个)元素,并使用inject(:+)对它们求和

例如:

>> a = [[1,10],[2,20],[3,30]]
>> b = [[1,50],[3,70]]
>> (a + b).group_by(&:first).map { |k,v| [k, v.map(&:last).inject(:+)] }
=> [[1, 60], [2, 20], [3, 100]]

你可以这样做:

(a + b).group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] }
首先将数组与+放在一起,因为不关心a和b,只关心它们的元素。然后,组_通过第一个元素对组合的数组进行分区,这样就可以轻松地处理内部数组。然后,您只需使用v.map(&:last)提取内部数组的第二个(或最后一个)元素,并使用inject(:+)对它们求和

例如:

>> a = [[1,10],[2,20],[3,30]]
>> b = [[1,50],[3,70]]
>> (a + b).group_by(&:first).map { |k,v| [k, v.map(&:last).inject(:+)] }
=> [[1, 60], [2, 20], [3, 100]]

根据Mini John对问题的解释:

(a1 + a2)
.inject([]) do |a, (i, n)|
  a.push([i, 0]) unless a.assoc(i)
  a.assoc(i)[1] += n
  a
end
.sort
# => [[0, 4], [1, 12], [3, 2], [7, 3]]

这是在一次迭代中完成的。

依赖于Mini John对问题的解释:

(a1 + a2)
.inject([]) do |a, (i, n)|
  a.push([i, 0]) unless a.assoc(i)
  a.assoc(i)[1] += n
  a
end
.sort
# => [[0, 4], [1, 12], [3, 2], [7, 3]]

这只需一次迭代即可完成。

我无法解析您的句子。请理解,并不是每个人都是以英语为母语的人,因此我举了一些例子来说明我正在努力实现的目标。当然,也不是每个人都是以英语为母语的人。这并没有改变我不能解析你的句子的事实。作为记录,库马拉,我可以完全理解你的要求,并且提供的例子尽可能清楚地说明了这一点。我能够通过查看Mini John的答案理解其中的含义,不是通过阅读问题。我无法解析你的句子。请理解,并不是每个人都是以英语为母语的人,因此我举了一些例子来说明我正在努力实现的目标。当然,也不是每个人都是以英语为母语的人。这并没有改变我不能解析你的句子的事实。作为记录,库马拉,我可以完全理解你的要求,并且提供的例子尽可能清楚地说明了这一点。我能够通过看Mini John的答案而不是通过阅读问题来理解其含义。