【发布时间】:2016-09-02 18:33:20
【问题描述】:
我想知道是否有更惯用的方法来获得下面代码所代表的功能。基本上我只想检查数组是否按照pattern 指定的顺序包含pattern 中的元素。这些元素之间有差距是可以的。
class Array
def has_pattern?(pattern)
offset = 0
pattern.each do |p|
offset = self[offset..-1].index(p)
return false if offset.nil?
end
return true
end
end
puts [1, 2, 3, 4, 5, 1].has_pattern?([1, 4, 5]) # true
puts [1, 2, 3, 4, 5, 1].has_pattern?([2, 3, 1]) # true
puts [1, 2, 3, 4, 5, 1].has_pattern?([1, 3, 2]) # false
上面的代码似乎可以工作,但对我来说不像是惯用的 Ruby。有没有更好的写法?
【问题讨论】:
-
不是特别,不是。你写的算法很不错。我敢肯定还有其他方法可以做到这一点,但它们不会像你所拥有的那样有效。
标签: ruby