Jor*_* Jr 3 ruby arrays sorting ruby-on-rails
例如,如果我有一个像这样的数组:
arr = ["HI","BYE","BYE","BYE"]
Run Code Online (Sandbox Code Playgroud)
有没有一种方法让我知道数组中有连续的"BYE"?
Car*_*and 11
你可以使用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
Run Code Online (Sandbox Code Playgroud)
要确定是否有任何连续元素相同:
arr.each_cons(2).any? { |s,t| s == t }
#=> true
Run Code Online (Sandbox Code Playgroud)
注意:
enum = arr.each_cons(2)
#=> #<Enumerator: ["HI", "BYE", "BYE", "BYE"]:each_cons(2)>
Run Code Online (Sandbox Code Playgroud)
可以通过将其转换为数组来获取此枚举器的元素:
enum.to_a
#=> [["HI", "BYE"], ["BYE", "BYE"], ["BYE", "BYE"]]
Run Code Online (Sandbox Code Playgroud)
这三个元素enum依次传递给块并分配给块变量:
s, t = enum.next
#=> ["HI", "BYE"]
s #=> "HI"
t #=> "BYE"
s, t = enum.next
#=> ["BYE", "BYE"]
s, t = enum.next
#=> ["BYE", "BYE"]
Run Code Online (Sandbox Code Playgroud)
编辑:以下是其他几种方法:
使用Enumerable#slice_when(Ruby v2.2 +):
arr.slice_when { |a,b| a != b }.any? { |a| a.size > 1 }
#=> true
Run Code Online (Sandbox Code Playgroud)
或者Enumerable#chunk(Ruby v1.9.3 +)和Object#本身(Ruby v.2.2 +).
arr.chunk(&:itself).any? { |_,a| a.size > 1 }
#=> true
Run Code Online (Sandbox Code Playgroud)