我有2个阵列:
['a', 'b', 'c', 'd', 'e', 'f']
['g', 'h', 'i']
我需要在第一个数组的每个第二个元素(或第n个)之后插入第二个数组的元素,结果是:
['a', 'b', 'g', 'c', 'd', 'h', 'e', 'f', 'i']
我有一个简单的方法吗?
答案 0 :(得分:8)
您始终可以使用自定义Enumerator
:
a1 = ['a', 'b', 'c', 'd', 'e', 'f']
a2 = ['g', 'h', 'i']
enum = Enumerator.new do |y|
e1 = a1.each
e2 = a2.each
loop do
y << e1.next << e1.next << e2.next
end
end
enum.to_a #=> ["a", "b", "g", "c", "d", "h", "e", "f", "i"]
或者一般情况:
n.times { y << e1.next }
答案 1 :(得分:7)
这样的事情:
a = ['a', 'b', 'c', 'd', 'e', 'f']
b = ['g', 'h', 'i']
a.each_slice(2). # => [["a", "b"], ["c", "d"], ["e", "f"]]
zip(b). # => [[["a", "b"], "g"], [["c", "d"], "h"], [["e", "f"], "i"]]
flatten # => ['a', 'b', 'g', 'c', 'd', 'h', 'e', 'f', 'i']
答案 2 :(得分:2)
a=['a', 'b', 'c', 'd', 'e', 'f']
b=['g', 'h', 'i']
b.each.with_index(1) { |e,i| a.insert((3*i)-1,e) }
a
#=> ['a', 'b', 'g', 'c', 'd', 'h', 'e', 'f', 'i']