我有一个这样的数组:
array = ['1','a','2','b']
我想这样做:
['x', '1', 'y', 'a', 'x', '2', 'y', 'b']
我试了很多个小时但没有结果。我最好的尝试是:
a = array.each_with_index do |val, index|
case index
when index == 0
a.insert(index, 'x')
when index.odd?
a.insert(index, 'x')
when index.even?
a.insert(index, 'y')
end
end
答案 0 :(得分:5)
您可以使用Enumerable
模块中的方法执行此类操作:
ary = ['1', 'a', '2', 'b']
xy = ['x', 'y']
ary.zip(xy.cycle)
# => [["1", "x"], ["a", "y"], ["2", "x"], ["b", "y"]]
ary.zip(xy.cycle).flat_map(&:reverse)
# => ["x", "1", "y", "a", "x", "2", "y", "b"]
答案 1 :(得分:1)
这些方法中的任何一种都可以使用
array = ['1','a','2','b']
array.each_slice(2).map {|a| ['x','y'].zip(a)}.flatten.compact
#=>["x", "1", "y", "a", "x", "2", "y", "b"]
(['x','y'] * (array.size / 2.0).ceil).take(array.size).zip(array).flatten
#=>["x", "1", "y", "a", "x", "2", "y", "b"]
array.each_slice(2).flat_map {|a| ['x','y'].zip(a).flatten}.compact
#=>["x", "1", "y", "a", "x", "2", "y", "b"]
['x','y'].cycle(array.size / 2 + array.size % 2).take(array.size).zip(array).flatten
#=>["x", "1", "y", "a", "x", "2", "y", "b"]
答案 2 :(得分:0)
这可能会有所帮助:
array.zip(['x', 'y'].cycle).map(&:reverse).flatten(1) #=> ["x", "1", "y", "a", "x", "2", "y", "b"]