Ruby Array Intersection,Hash.has_value?与基于哈希值的数组[i + 1]交集

时间:2009-12-14 06:18:37

标签: ruby arrays hash intersection

我正在尝试使用基于哈希值的数组和散列的交集来填充数组:

array2 = ["hi","world","One"]
VALS = {:one => "One", :two => "Two"}
array2 = VALS.values & array2
print array2

适用于哈希值和array2[i]的交集,但如果我想填充来自array2[i+1]的{​​{1}}元素,我就迷失了。

也尝试过:

array2

但没有运气。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

array = []
array2.each_with_index{|v,i| array << (VALS.has_value? i ?  array2[i+1] : nil)}

答案 1 :(得分:0)

听起来像是你试图将你的数组视为一系列内部键和值,或者将外部键视为val的反转。因此,您的示例的正确结果将是:

{"hi" => "World", "One" => :one}

是吗?如果是这样,请点击这里:

invertedvals = vals.invert
Hash[*array2.map {|x| [x,invertedvals[x]]}.flatten.compact]

如果没有,请澄清你想要产生的结果......

答案 2 :(得分:0)

以下是我最终得到的答案:

array1.each do |i|
   puts "#"*5 + i + "#"*5 if !array2.include? i
  if array2.include? i
    result << i+":" << array2[array2.index(i)+1]
  end
end

有更快的算法吗?想用:

array1 & array2

同样在一点使用注入,基准测试显示其中任何一个之间的差别很小。