在ruby中逐个列出两个列表

时间:2016-02-15 17:52:46

标签: arrays ruby

我有一个类似的列表:

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'

3 个答案:

答案 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)

您可以使用Enumerable#each_slice

list.each_slice(2) { |x,y| p "#{x} #{y}" }

答案 2 :(得分:2)

以下是其他几种方法:

  1. 使用Range#step

    (0...list.size).step(2).map { |i| list.values_at(i, i.next).join }
    #=> ["ab", "cd", "ef", "gh"]
    
  2. 通过按值在数组中的位置对值进行分组

    list.group_by.with_index {|_, idx| idx.even?}.values.transpose.map(&:join)
    #=> ["ab", "cd", "ef", "gh"]