1

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

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

对于哈希值 和 的交集效果很好array2[i],但是如果我想用来自 的array2[i+1]元素填充array2,我会迷路。

也试过:

array2.select { |i| VALS.has_value? i ? array2[i+1] : nil }

但没有运气。

有任何想法吗?

4

3 回答 3

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

也曾在某个时候使用过注入,基准测试显示它们之间的差异很小。

于 2009-12-15T22:36:59.950 回答
0

在我看来,您正试图将数组视为一系列内部键和值,或者将外部键视为 val 的倒数。因此,您示例的正确结果是:

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

那正确吗?如果是这样,这里:

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

如果不是,请说明您要产生什么结果...

于 2009-12-14T14:45:09.283 回答
0
array = []
array2.each_with_index{|v,i| array << (VALS.has_value? i ?  array2[i+1] : nil)}
于 2009-12-14T06:41:30.933 回答