我想知道是否有更惯用的方法来获得下面代码所代表的功能。基本上我只是想按照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。有没有更好的方式来写这个?
答案 0 :(得分:2)
这是我的看法:
func calculation(operatorType: String, number1: Double, number2: Double) -> Double {
if operatorType == "+" {
return number1 + number2
} else if operatorType == "-" {
return number1 - number2
} else if operatorType == "/" {
return number1 / number2
} else if operatorType == "*" {
return number1 * number2
} else {
return 0
}
}
它只通过数组一次,所以当数组很大时它可能会有所不同。
答案 1 :(得分:1)
这是一种不同的方法:
class Array
def has_pattern?(pattern)
(self - (self - pattern))
.each_cons(pattern.length)
.any? { |p| p === pattern }
end
end
但是,正如我在上面的评论中所说,我认为你的解决方案更胜一筹。