Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 如何检查数组中的每个单词是否包含子字符串,并拒绝RubyonRails中的子字符串?_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何检查数组中的每个单词是否包含子字符串,并拒绝RubyonRails中的子字符串?

Ruby on rails 如何检查数组中的每个单词是否包含子字符串,并拒绝RubyonRails中的子字符串?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我不希望包含子字符串的单词有效或良好 输出应仅为[“SUPER”] 您可以使用: 你可以这样说: a=a.reject{| x | x.include?(“好”)| | x.include?(“有效”)} 中的所做的是检查作为参数传递的数组中是否存在接收器,这意味着: a.reject { |x| ["GOOD", "VALID"].any?{ |word| x.include?(word) } } #=> ["SUPER"] 也就是说,它检查的是“整个”对象,而不是其中的一部分 如果要

我不希望包含子字符串的单词有效或良好

输出应仅为
[“SUPER”]

您可以使用:

你可以这样说:

a=a.reject{| x | x.include?(“好”)| | x.include?(“有效”)}

中的
所做的是检查作为参数传递的数组中是否存在接收器,这意味着:

a.reject { |x| ["GOOD", "VALID"].any?{ |word| x.include?(word) } }
#=> ["SUPER"]
也就是说,它检查的是“整个”对象,而不是其中的一部分

如果要拒绝数组中与
VALID
和/或
GOOD
匹配的元素,可以使用
=~

1.in?([1, 2]) # true
3.in?([1, 2]) # false
请注意,这也将拒绝“有效性”、“善良”等词语。

可以:

["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"].reject { |word| word =~ /VALID|GOOD/ } # ["SUPER"]

不起作用。更新了我的问题,以便更清楚地说明“罗马无效”是否包括在内?“有效”呢?“仅限超级”是什么意思?请编辑以显示所需的返回值。您可以使用
a.reject!{…}
(使用
)而不是将结果重新分配给
a
…或
x.match?(/GOOD | VALID/)
。@3limin4t0r对Stefan答案的评论提醒我,最好是
bad_strings=[“GOOD”,“VALID”];r=Regexp.union(坏字符串)#=>/GOOD | VALID/;a、 拒绝{| x | x.match?(r)}#=>[“超级”]
。这样,如果坏字符串的集合在将来发生更改,则只需更改数组
坏字符串
。@CarySwoveland,regex-grhh;)@Fabio,我记得,“grhh”在意大利语中在英语中的意思是“aaah”。如果您需要更动态的方法:
Regexp.union(%w[GOOD VALID])
将动态生成正则表达式。@CarySwoveland我不知道您运行的是哪个版本的Ruby,但运行它时会得到不同的结果:
a=%w[b];a-a.grep(/c/)#=>[“b”,“b”]
(ruby 2.6.5p114)。但是,如果你可以使用
grep\u v
并在一次迭代中得到正确的结果,就没有理由再做额外的计算减法数组了。@CarySwoveland虽然
['a','a','c','c']-['c']
将同时删除
'c'
's和
'a'
's,但它也会同时保留这两个
'a'
's?(在电话上作曲)让我把责任归咎于我使用的Ruby版本,我脸上露出了笑容。
["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"].reject { |word| word =~ /VALID|GOOD/ } # ["SUPER"]
a = ["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"]
a = a.grep_v(/GOOD|VALID/)
#=> ["SUPER"]