我有一个散列,其中有一些键作为数组,如下所示:
foo = {[45, 121]=>:some_field}
如何选择 :some_field 其中 foo 键包含 45?
其次,如果找到匹配项,我如何检索同一键中的其他元素?
我有一个散列,其中有一些键作为数组,如下所示:
foo = {[45, 121]=>:some_field}
如何选择 :some_field 其中 foo 键包含 45?
其次,如果找到匹配项,我如何检索同一键中的其他元素?
尽管您可以这样做,但它有点违背了使用哈希的目的,因为您必须对整个事物进行线性扫描。为相同的值设置多个哈希键会更好,因为您可以使用哈希作为索引。
例子:
found = foo.find { |k, v| k.include?(n) }
found and found[1]
请记住,如果您在键中有大量条目并且在散列中有大量项目,则此性能将很糟糕,因为它必须单独针对所有键和所有值进行测试。
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
如果它不仅仅是一个元素,我建议反转你的哈希:
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]