arrays - 检查连续数字

标签 arrays ruby integer conditional-statements

我有一个整数数组m。我正在寻找一种方法来检查 m 的元素是否连续。有没有办法测试连续数字?

我想出了这段代码,旨在在数组长度为四时工作:

m.count == 4 && (m.max-m.min) == 3

对于 [1,1,1,4][0,0,0,3] 错误地返回 true

最佳答案

Enumerable 有一个非常方便的方法叫做 each_cons是这样工作的:

[1,2,3,4].each_cons(2).to_a # => [ [1, 2], [2, 3], [3, 4] ]

也就是说,它会生成每组连续的 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

这个方法比其他方法有优势,因为 all? 一旦 block 返回 false 就会短路,它只会测试数字,直到找到不满足条件的一对(b == a + 1)。当然,只有四个元素这并没有什么不同——除非你在性能很重要的情况下调用这个方法数千次。

关于arrays - 检查连续数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32973830/

相关文章:

c - C中的1U和1有什么区别吗?

python - 分割并附加每第二个逗号到数组

c++ - 指针的使用 - 非常困惑! C++

arrays - Laravel 如何获取数组而不是 QueryBuilder select() 语句的对象?

ruby-on-rails - Minitest 路线测试

c++ - 整数转换问题

javascript - 按数组中对象内的对象属性过滤对象数组

ruby - 如何从 Ruby 中访问 gem 的版本?

ruby-on-rails - 如何按多个字符串降序对 Ruby 二维数组进行排序?

objective-c - 如何暂停 objective-c 不到一秒的时间