当且仅当Array2元素匹配哈希值(不是键)时,使用Array2 String元素填充ruby Array1

时间:2009-12-14 05:27:58

标签: ruby arrays hash scope nested-loops

我有一个红宝石哈希:

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错误。我一定错过了什么。

3 个答案:

答案 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