比较Ruby中的序列

ano*_*non 5 ruby arrays compare

假设我必须(小到中)数组:

tokens = ["aaa", "ccc", "xxx", "bbb", "ccc", "yyy", "zzz"]
template = ["aaa", "bbb", "ccc"]
Run Code Online (Sandbox Code Playgroud)

如何确定是否tokens包含template相同顺序的所有条目?

(请注意,在上面的示例中,应忽略第一个"ccc",由于最后一个"ccc"而导致匹配.)

gle*_*ald 2

我认为最干净的方法是通过递归来做到这一点:

class Array
  def align(other)
    if pos = index(other.first)
      other.size == 1 || slice(pos..-1).align(other.drop(1))
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

所以:

[1,2,3,4,3,2,1].align([1,2,3])
=> true
[1,2,3,4,3,2,1].align([1,4,1])
=> true
[1,2,3,4,3,2,1].align([1,4,2,3])
=> nil
Run Code Online (Sandbox Code Playgroud)