Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用检查数组中的多个项。包括?--Ruby初学者_Ruby On Rails_Ruby - Fatal编程技术网

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"])