ruby-on-rails - 你怎么知道一个数组是否有连续的相同元素?

标签 ruby-on-rails arrays ruby sorting

例如,如果我有一个像这样的数组:

arr = ["HI","BYE","BYE","BYE"]

有没有一种方法可以让我知道数组中有连续的“BYE”?

最佳答案

您可以使用 Enumerable#each_cons为此:

arr = ["HI", "BYE", "BYE", "BYE"]

arr.each_cons(2).any? { |s,t| s == "BYE" && t == "BYE" }
  #=> true
arr.each_cons(2).any? { |s,t| s == "HI" && t == "HI" }
  #=> false

判断任何连续元素是否相同:

arr.each_cons(2).any? { |s,t| s == t }
  #=> true

注意:

enum = arr.each_cons(2)
  #=> #<Enumerator: ["HI", "BYE", "BYE", "BYE"]:each_cons(2)>

这个枚举器的元素可以通过将其转换为数组来获得:

enum.to_a
  #=> [["HI", "BYE"], ["BYE", "BYE"], ["BYE", "BYE"]]

enum的三个元素依次传递给block并赋值给block变量:

s, t = enum.next
  #=> ["HI", "BYE"] 
s #=> "HI"
t #=> "BYE"

s, t = enum.next
  #=> ["BYE", "BYE"] 

s, t = enum.next
  #=> ["BYE", "BYE"] 

这里有一些其他的方法:

使用Enumerable#slice_when ( ruby v2.2+):

arr.slice_when { |a,b| a != b }.any? { |a| a.size > 1 }
  #=> true 

Enumerable#chunk (Ruby v1.9.3+) 和 Object#itself (Ruby v.2.2+)。

arr.chunk(&:itself).any? { |_,a| a.size > 1 }
  #=> true

或者简单地遍历数组:

arr.any? && (1..arr.size-1).any? { |i| arr[i] == arr[i-1] }
  #=> true

arr.any? 包含在 arr 为空的情况下。

关于ruby-on-rails - 你怎么知道一个数组是否有连续的相同元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427726/

相关文章:

java - 将字符串转换为 double[][] - Java

ruby-on-rails - OAuth2::Error,invalid_request:redirect_uri 与应用程序配置不匹配

ruby-on-rails - 如何列出所有模型并包含一个通用模块

ruby-on-rails - 部署 rails 应用程序。 JQuery-UI 错误

mysql - rails : how do I test a helper method that executes a mysql query

javascript - 如何从对象中检索数据并将其存储到数组中

ios - 在 Swift 中重构解决方案

javascript - Rails turbolinks 问题与 window.onload

ruby-on-rails - 在 Snow Leopard 上安装 Ruby 和 Rails 的最佳实践?

arrays - 如何向数组添加多个元素?