10

我有以下数组:

a = ['sda', 'sdb', 'sdc', 'sdd']

现在我想遍历这些条目,但总是有两个元素。我现在这样做如下:

while b = a.shift(2)
  # b is now ['sda', 'sdb'] or ['sdc', 'sdd']
end

这感觉有点不对劲,有没有更好的方法来做到这一点?有没有办法轻松获得类似的东西[['sda', 'sdb'], ['sdc', 'sdd']]

我读了http://www.ruby-doc.org/core-1.9.3/Array.html但我没有找到有用的东西......

4

2 回答 2

19

您可能想查看Enumerable,它包含在Array.

您想要的方法是Enumerable#each_slice,它从可枚举的元素中反复产生给定的元素数量(如果最后没有那么多元素,则更少):

a = ['sda', 'sdb', 'sdc', 'sdd']
a.each_slice(2) do |b|
    p b
end

产量:

$ ruby slices.rb 
["sda", "sdb"]
["sdc", "sdd"]
$
于 2012-05-30T12:21:55.827 回答
0

如果您需要使用严格的对,您可能需要使用Enumerable#each_cons方法。each_slice这是和之间的区别each_cons

a = ['a', 'b', 'c', 'd', 'e']
a.each_slice(2) { |i| p i }
# ["a", "b"]
# ["c", "d"]
# ["e"]
a.each_cons(2) { |i| p i }
# ["a", "b"]
# ["b", "c"]
# ["c", "d"]
# ["d", "e"]
于 2022-01-20T10:33:03.950 回答