Ruby on rails 使用检查数组中的多个项。包括?--Ruby初学者
有没有更好的方法来写这个:Ruby on rails 使用检查数组中的多个项。包括?--Ruby初学者,ruby-on-rails,ruby,Ruby On Rails,Ruby,有没有更好的方法来写这个: if myarray.include? 'val1' || myarray.include? 'val2' || myarray.include? 'val3' || myarray.include? 'val4' 使用集合交点(): 您还可以循环(any?将在第一次出现时停止): 对于小数组来说,这没关系,在一般情况下,最好使用O(1)谓词: values = ["val1", "val2", "val3", "val4"].to_set mya
if myarray.include? 'val1' ||
myarray.include? 'val2' ||
myarray.include? 'val3' ||
myarray.include? 'val4'
使用集合交点():
您还可以循环(any?
将在第一次出现时停止):
对于小数组来说,这没关系,在一般情况下,最好使用O(1)谓词:
values = ["val1", "val2", "val3", "val4"].to_set
myarray.any? { |x| values.include?(x) }
如果Ruby>=2.1,请使用:
创建自己的可重用方法:
class String
def include_any?(array)
array.any? {|i| self.include? i}
end
end
用法
如果myarray.include,是否有更简单的读法?['val1','val2','val3']如果不是,那么我想你的答案似乎是最好的。@Hopstream,添加了另一个带有any的实现?为什么使用否定形式?为什么不直接使用
(self&other)。任何?
而不是!(自我和其他)。空?
@m_x:好的观点,通常有吗?与块一起使用,但没有块就完全有意义。编辑。但是如果数组中的值为nil/false呢?任何人都会失败…很有趣。查看any?
和empty?
的源代码,从性能角度来看,使用否定形式确实是正确的(empty?
只检查C数组的长度,而any?
由于缺少块,涉及更复杂的过程)。我今天学到了一些东西。
values = ["val1", "val2", "val3", "val4"].to_set
myarray.any? { |x| values.include?(x) }
myarray.to_set.intersect?(values.to_set)
class String
def include_any?(array)
array.any? {|i| self.include? i}
end
end
"a string with many words".include_any?(["a", "string"])