遍历 Ruby 数组的两两元素。

32

我该如何在Ruby数组上进行迭代,并始终获取当前值和下一个值,例如:

[1,2,3,4,5,6].pairwise do |a,b|
  # a=1, b=2 in first iteration
  # a=2, b=3 in second iteration
  # a=3, b=4 in third iteration
  # ...
  # a=5, b=6 in last iteration
end

我的用例:我想测试一个数组是否已排序,通过使用以下这样的迭代器,我可以始终比较两个值。

我不是在寻找像这个问题中的each_slice将Ruby数组转换为连续对数组

1个回答

51

你正在寻找each_cons方法:

(1..6).each_cons(2) { |a, b| p a: a, b: b }
# {:a=>1, :b=>2}
# {:a=>2, :b=>3}
# {:a=>3, :b=>4}
# {:a=>4, :b=>5}
# {:a=>5, :b=>6}

2
是的,这正是我需要的!我查看了EnumerableEnumerator,但没有看到这个。谢谢。 - Andi
2
@Andi 关于你的用例:ary.each_cons(2).all? { |a, b| a <= b } 如果值已排序,则返回 true。(不幸的是,由于 each_cons 产生值的方式,你不能在这里使用 all?(&:<=) - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接