我有一个哈希,它有一些键作为数组,如下所示:
foo = {[45, 121]=>:some_field}
如何选择:some_field,其中foo键包含45?
除此之外,如果找到匹配项,如何检索同一个键中的其他元素?
答案 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]