mda*_*mau 5 ruby arrays integer conditional-statements
我有一个m整数数组.我正在寻找一种方法来检查元素是否m是连续的.有没有办法测试连续数字?
我想出了这个代码,当数组长度为4时,它可以工作:
m.count == 4 && (m.max-m.min) == 3
Run Code Online (Sandbox Code Playgroud)
其中错误地返回true为[1,1,1,4]或[0,0,0,3].
您可以尝试以下方法:
a == (a.min..a.max).to_a && a.count == 4
Run Code Online (Sandbox Code Playgroud)
这仅在阵列按升序排列时有效。[3, 4, 5, 6]将通过,但[4, 3, 5, 6]不会。
Enumerable有一个非常方便的方法,调用each_cons方式如下:
[1,2,3,4].each_cons(2).to_a # => [ [1, 2], [2, 3], [3, 4] ]
Run Code Online (Sandbox Code Playgroud)
也就是说,它产生每个连续的n个元素集.在我们的例子中,n是2.
当然,顾名思义,它返回一个Enumerator,因此我们可以将它与其他Enumerable方法链接起来,如all?:
def four_consecutive?(arr)
return false unless arr.size == 4
arr.each_cons(2).all? {|a, b| b == a + 1 }
end
four_consecutive?([2,3,4,5]) # => true
four_consecutive?([2,2,2,5]) # => false
four_consecutive?([1,2,3,4,5]) # => false
Run Code Online (Sandbox Code Playgroud)
这种方法具有上述优点,因为all?一旦块返回false就会发生短路,它只会测试数字,直到找到一个不满足条件的对(b == a + 1).当然,只有四个元素,这并没有什么区别 - 除非你在性能很重要的情况下多次调用这种方法.
| 归档时间: |
|
| 查看次数: |
3259 次 |
| 最近记录: |