当且仅当Array2元素与哈希值(非键)匹配时,使用Array2字符串元素填充ruby Array1

当且仅当Array2元素与哈希值(非键)匹配时,使用Array2字符串元素填充ruby Array1,ruby,arrays,hash,scope,nested-loops,Ruby,Arrays,Hash,Scope,Nested Loops,我有一个ruby哈希: VALS = { :one => "One", :two => "Two" } 和一个数组: array2 = ["hello", "world", "One"] 问题:如何填充新的array1,使其只提取array2中与VAL中的值完全匹配的任何值 例如,我尝试过: array2.each_with_index do |e,i| array1 << e if VALS[i] ~= e end 我遇到无法转换fixnum的错误。我一定是遗漏

我有一个ruby哈希:

VALS = { :one => "One", :two => "Two" }
和一个数组:

array2 = ["hello", "world", "One"]
问题:如何填充新的array1,使其只提取array2中与VAL中的值完全匹配的任何值

例如,我尝试过:

array2.each_with_index do |e,i| 
array1 << e if VALS[i] ~= e
end

我遇到无法转换fixnum的错误。我一定是遗漏了什么。

如果两个集合都很大,则使用嵌套循环会非常慢。最好将内容视为集合:

array1 = VALS.values & array2
print array1
输出:

One

如果两个集合都很大,则使用嵌套循环将非常缓慢。最好将内容视为集合:

array1 = VALS.values & array2
print array1
输出:

One
这里有一个选项:

hash = { :one => "One", :two => "Two" }
array = ["hello", "world", "One"]

p array.select { |i| hash.has_value? i }
# >> ["One"]
这里有一个选项:

hash = { :one => "One", :two => "Two" }
array = ["hello", "world", "One"]

p array.select { |i| hash.has_value? i }
# >> ["One"]
明白了

array.select do |i|
  if VALS.has_value? i
    result << array[array.index(i)+1]
  end
end
array.select do|i|
如果VALS.have_值?我
结果明白了

array.select do |i|
  if VALS.has_value? i
    result << array[array.index(i)+1]
  end
end
array.select do|i|
如果VALS.have_值?我

结果不知道&运算符作为数组的集合交集进行操作。每天学习新东西:)+1hmmm。。。也可以在不需要“设置”的情况下工作。。想不到!但是如果我想得到与第I个元素匹配的数组的I+1个元素呢?我不知道&运算符作为数组的集合交集操作。每天学习新东西:)+1hmmm。。。也可以在不需要“设置”的情况下工作。。想不到!但是,如果我想得到与第I个元素匹配的数组的I+1个元素呢?我不建议将
I
用作表示数组成员的块参数。我只使用它来表示索引号。我不建议将
I
用作表示数组成员的块参数。我只会用它来表示一个索引号。