我有一个红宝石哈希:
VALS = { :one => "One", :two => "Two" }
和一个数组:
array2 = ["hello", "world", "One"]
问题:如何填充新的array1,以便它只引入array2中与VALS中的值完全匹配的任何值?
例如,我尝试过:
array2.each_with_index do |e,i|
array1 << e if VALS[i] ~= e
end
与其他东西一起,没有工作。小白。
由于
辉煌!但是我试过了:
p array.select { |i| hash.has_value? i ? array[i+1] : "foo"}
我得到了一个无法转换fixnum错误。我一定错过了什么。
答案 0 :(得分:6)
如果两个集合都很大,那么使用嵌套循环会非常慢。最好将内容视为集合:
array1 = VALS.values & array2
print array1
输出:
One
答案 1 :(得分:0)
这是一个选项:
hash = { :one => "One", :two => "Two" }
array = ["hello", "world", "One"]
p array.select { |i| hash.has_value? i }
# >> ["One"]
答案 2 :(得分:0)
得到了它!
array.select do |i|
if VALS.has_value? i
result << array[array.index(i)+1]
end
end