如何检查数组中的每个单词是否包含子字符串并拒绝 Rails 上 Ruby 中的那些?

How to check if each word in an array contains a substring and reject those in Ruby on Rails?

a = ["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"]
a = a.reject { |x| x.in? ["GOOD", "VALID"]}
#=> ["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"]

我不想要包含子字符串 VALID 或 GOOD 的单词。

输出应仅为 ["SUPER"]

您可以使用 include?:

a.reject { |x| ["GOOD", "VALID"].any?{ |word| x.include?(word) } }
#=> ["SUPER"]

你可以这样说:

a = a.reject { |x| x.include?("GOOD") || x.include?("VALID")}

in?所做的是检查接收者是否存在于作为参数传递的数组中,意思是:

1.in?([1, 2]) # true
3.in?([1, 2]) # false

也就是说,它检查 "whole" 对象,而不是它的一部分。

如果你想拒绝数组中匹配VALID and/or GOOD的元素,你可以使用=~:

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

注意,这也会拒绝 "VALIDITY"、"GOODNESS" 等词

grep_v 可行:

a = ["SUPER", "SOME_VALID", "ROME_INVALID", "SUPER_GOOD"]
a = a.grep_v(/GOOD|VALID/)
#=> ["SUPER"]