如何将keep_if与字符串数组一起使用

时间:2016-07-05 04:47:30

标签: ruby

我试图在我的Rails 5应用程序中使用keep_if和Ruby 2.3.1。

a = ["a", "b", "c", "d" ]
b = ["b", "d"]

a.keep_if { |v| v=~ /["#{b}"]/ }
#=> ["b", "d"]

真实项目:

a = ["apple", "banana", "orange"]
b = ["mangoes", "banana", "pear"]

a.keep_if { |v| v=~ /["#{b}"]/ }
#=> ["mangoes", "banana", "pear"]

我的期望:

#=> ["banana"]

我猜猜某种正则表达式会被使用吗?如何得到我的预期?

1 个答案:

答案 0 :(得分:1)

keep_if()删除self的每个元素,其中块的评估结果为false。见Array#select!

如果没有给出阻止,则返回枚举器。

@Cary Swoveland在comment中提到,如果您想使用keep_if(),以下内容应该有效:

a.keep_if { |v| b.include?(v) }   #=> ["banana"]

如果您想使用Array#select!代替可能的不同场景,以下内容将起作用:

c = a+b
c.select { |x| c.count(x) == 2 }.uniq   #=> ["banana"]
# (use .uniq > 2 for values that appear more than once)