在任一个散列或散列
的值在我的散列的阵列使用#选择要么嵌套散列:在任一个散列或散列
test_multiple_hash = { test: { another_test: 123 } }
或散列的数组:
test_multiple_hash = { test: [{ another_test: 123 }, { another_test: 124 }] }
具有取出一个后值,我需要使用#选择查找特定的嵌套哈希:
test_multiple_hash[:test].select { |s| s[:another_test] == 123 }
如果我的哈希只有一个散列,然后除非将单个散列转换为数组,否则不适合我的需要。
当散列中的某个键的值是单个散列或散列数组时,有没有更好的方法通过键的值来查找对象?
你可以做
[my_hash[:test]].flatten.select { |s| s[:another_test] == 123 }
此套件是我对这个特定问题的需求,其他解决方案也可以做到这一点,对于上面的问题更清洁!感谢您的建议!我现在正在申请=) – Bodao
我建议你开始做通用模式的所有基本价值:
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.
然后做你想做的,假设值是绝对的阵列,即摹:
hash.map do |k, v|
[k, [*v]]
end.to_h[:test].select do |s|
s[:another_test] == 123
end
非常感谢,这确实帮助我解决了我的问题,并帮助我实现了在整个代码库中处理不同数据模型的有效方法...... – Bodao
方法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 }
#选择的结果将始终是一个数组,即使test_multiple_hash[:test]
不是一个数组。
什么是'test_multiple_hash'? – sawa
酷,downvote没有理由为什么? – Bodao
用更简单的(嵌套散列)情况,你的预期结果是什么? – sawa