我试图在我的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"]
我猜猜某种正则表达式会被使用吗?如何得到我的预期?
答案 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)