我有一个类似的列表:
dataSource.sort() { previous, next in
previous < next // Ascending
}
dataSource.sort() { previous, next in
previous > next // Descending
}
我想逐两遍历它,这样我就可以在同一次迭代中修改'a'和'b'。这将是我需要做的java等价物:
list = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
答案 0 :(得分:6)
您可以使用each_slice
:
list.each_slice(2) { |first, second| p first + second }
=> "ab"
"cd"
"ef"
"gh"
当您使用each_slice(2)
时,您会在每次迭代时传递像[&#34; a&#34;,&#34; b&#34;]这样的块数组。数组的大小取决于each_slice
参数。
然后,在块中,接下来发生:
first, second = ["a", "b"]
first
#=>"a"
second
#=>"b"
答案 1 :(得分:5)
list.each_slice(2) { |x,y| p "#{x} #{y}" }
答案 2 :(得分:2)
以下是其他几种方法:
使用Range#step
(0...list.size).step(2).map { |i| list.values_at(i, i.next).join }
#=> ["ab", "cd", "ef", "gh"]
通过按值在数组中的位置对值进行分组
list.group_by.with_index {|_, idx| idx.even?}.values.transpose.map(&:join)
#=> ["ab", "cd", "ef", "gh"]