将数组的元素添加到数组中每个数组的特定索引

时间:2019-01-04 21:52:39

标签: ruby

我有一个数组数组,可以用作数据表,并且正在尝试添加一个额外的数组,就像在该表中添加一个额外的列一样。

为简单起见,假设第一个数组为a

a = [["a", "b", "c"], ["e", "f", "g"], ["i", "j", "k"]]

第二个数组是b

b = ["d", "h", "l"]

所需的输出是:

c = [["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l"]]

我已经尝试过使用+,并且尝试使用map,但无法获得

4 个答案:

答案 0 :(得分:5)

您可以将它们压缩在一起,这将创建像[["a", "b", "c"], "d"]这样的数组元素,然后只需展平每个元素。

a.zip(b).map(&:flatten)
#=> [["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l"]]

根据卡里的评论,答案有所改善。我认为他以前做过Ruby的事情。

答案 1 :(得分:4)

a.zip(b).map { |arr,e| arr + [e] }
  #=> [["a", "b", "c", "d"],
  #    ["e", "f", "g", "h"],
  #    ["i", "j", "k", "l"]]

中间计算如下。

a.zip(b)
  #=> [[["a", "b", "c"], "d"],
  #    [["e", "f", "g"], "h"],
  #    [["i", "j", "k"], "l"]]

请参见Array#zip

答案 2 :(得分:0)

您可以结合使用#each_with_index#map遍历数组a并附加数组b的各个元素

> a.each_with_index.map{|e, i| e | [b[i]] }
=> [["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l"]]

答案 3 :(得分:0)

我们也可以预期输出如下,

 >   a.each_with_index { |n,i| n << b[i] }
 => [["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l"]]