我有两个压缩在一起的数组,现在我想在偶数位置滑动值。
这就是我尝试过的:
a = [1, 2, 3, 4]
b = [111, 222, 333, 444]
c = a.zip(b)
# Now c is equal to: [[1, 111], [2, 222],[3, 333],[4, 444]]
c.map.with_index do |item, index|
a = item[0]
b = item[1]
if index%2 == 0
a, b = b, a
end
end
我想拥有的东西
c = [[1, 111], [222,2], [3, 333],[444, 4]]
但是它仍然不起作用,是否有更好的解决方案?或者我该如何解决我的问题呢?
编辑: 我已经意识到,我可以只使用“ .reverse”方法来交换元素。但是我仍然无法使其正常工作。
答案 0 :(得分:3)
也许尝试:
c.map.with_index do |item, index|
index%2 != 0 ? item.reverse : item
end
=> [[1, 111], [222, 2], [3, 333], [444, 4]]
答案 1 :(得分:1)
我可能会选择
a = [1, 2, 3, 4]
b = [111, 222, 333, 444]
a.zip(b).each_with_index do |item, idx|
item.reverse! if idx.odd?
end
#=>[[1, 111], [222, 2], [3, 333], [444, 4]]
zip
,而reverse!
只是index
是奇数的项目。
其他选项包括:
a.map.with_index(1) do |item,idx|
[item].insert(idx % 2, b[idx -1])
end
#=>[[1, 111], [222, 2], [3, 333], [444, 4]]
在这里,我们使用with_index
从1开始,然后使用取模方法确定b
中的项目是否应放置在索引0或索引1上。
或
a.zip(b).tap {|c| c.each_slice(2) {|_,b| b.reverse!}}
#=>[[1, 111], [222, 2], [3, 333], [444, 4]]
在这里我们像您的示例那样压缩a和b,然后我们将Array
子分成2组,并使用Array
反转第二个reverse!
,这将修改{{1 }} 到位。