0

我有一个散列,其中有一些键作为数组,如下所示:

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

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

其次,如果找到匹配项,我如何检索同一键中的其他元素?

4

3 回答 3

4

尽管您可以这样做,但它有点违背了使用哈希的目的,因为您必须对整个事物进行线性扫描。为相同的值设置多个哈希键会更好,因为您可以使用哈希作为索引。

例子:

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

请记住,如果您在键中有大量条目并且在散列中有大量项目,则此性能将很糟糕,因为它必须单独针对所有键和所有值进行测试。

于 2012-09-06T14:51:53.550 回答
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
于 2012-09-06T14:50:35.760 回答
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]
于 2012-09-06T14:57:55.740 回答