我的哈希值中的值是嵌套哈希:
test_multiple_hash = { test: { another_test: 123 } }
或哈希数组:
test_multiple_hash = { test: [{ another_test: 123 }, { another_test: 124 }] }
获取值后,我需要使用#select查找特定的嵌套哈希值:
test_multiple_hash[:test].select { |s| s[:another_test] == 123 }
如果我的哈希只有一个哈希,那么除非我将单个哈希转换为数组,否则select
不能满足我的需求。
当散列中的键值是单个散列还是散列数组时,是否有更好的方法可以通过键的值查找对象?
答案 0 :(得分:2)
我建议你先从制作普通模式的所有基础值开始:
hash = { test: { another_test: 123 },
test2: { test: [{ another_test: 123 }, { another_test: 124 }] }
}
hash.map { |k, v| [k, [*v]] }.to_h # now all of them are arrays.
然后做任何你想做的事情,假设这些值肯定是数组,e。 G:
hash.map do |k, v|
[k, [*v]]
end.to_h[:test].select do |s|
s[:another_test] == 123
end
答案 1 :(得分:1)
你可以做到
item.action
答案 2 :(得分:1)
方法Kernel#Array会将其参数转换为数组:
2.2.1 :002 > Array(1)
=> [1]
除非参数已经是数组;然后它返回参数不变:
2.2.1 :003 > Array([1])
=> [1]
因此,您可以使用Array函数强制test_multiple_hash[:test]
成为数组:
Array(test_multiple_hash[:test]).select { |s| s[:another_test] == 123 }
#select的结果将始终是一个数组,即使test_multiple_hash[:test]
不是数组。