我有一个数组,想在所有元素之间插入一个新元素,就像join方法一样.例如,我有
[1,[],"333"]
而我需要的是
[1,{},"333"]
请注意,在所有元素之间插入了一个新的空哈希.
编辑:
目前我所拥有的是:
irb(main):028:0> a = [1,"333"] => [1,"333"] irb(main):029:0> a = a.inject([]){|x,y| x << y; x << {}; x} => [1,"333",{}] irb(main):030:0> a.pop => {} irb(main):031:0> a => [1,"333"] irb(main):032:0>
我想知道最好的方法.
解决方法
[1,2,3].flat_map { |x| [x,:a] }[0...-1] #=> [1,:a,3]
仅供参考,该功能称为intersperse(至少在Haskell中).
[更新]如果要避免切片(创建数组的副本):
[1,:a] }.tap(&:pop) #=> [1,3]