我有一个数组数组,可以用作数据表,并且正在尝试添加一个额外的数组,就像在该表中添加一个额外的列一样。
为简单起见,假设第一个数组为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
,但无法获得
答案 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"]]