当Key是一个数组时,选择Hash Value

时间:2012-09-06 14:48:32

标签: ruby

我有一个哈希,它有一些键作为数组,如下所示:

foo = {[45, 121]=>:some_field}

如何选择:some_field,其中foo键包含45?

除此之外,如果找到匹配项,如何检索同一个键中的其他元素?

3 个答案:

答案 0 :(得分:4)

虽然你可以做到这一点,但它有点破坏了使用哈希的目的,因为你必须对整个事物进行线性扫描。为同一个值设置多个哈希键会好得多,因为你可以使用哈希作为索引。

示例:

found = foo.find { |k, v| k.include?(n) }
found and found[1]

请记住,如果您在密钥中有大量条目并且哈希中包含大量项目,那么这将是糟糕的性能,因为它必须针对所有密钥进行测试价值观。

答案 1 :(得分:2)

foo = {[45, 121]=>:some_field}
foo.detect{ |k,v| k.include? 45 }
#=> [[45, 121], :some_field]
foo.detect{ |k,v| k.include? 45 }.last
#=> :some_field

答案 2 :(得分:1)

如果它不仅仅是一个元素,我建议反转你的哈希:

foo = {[45, 121]=>:some_field, [1, 45, 7] => :some_other_field}

bar = {}
foo.each do |k, v|
  k.each do |x|
    if bar.has_key?(x)
      bar[x] << [[k, v]]
    else
      bar[x] = [[k, v]]
    end
  end
end

p bar[45]