arrays - 从包含数组元素的哈希中,如何找到特定数组值的键?
问题描述
我的哈希的每个值都是一个数组:
tab_details = {
'ex1' => ['1', '2']
}
我想传递一个元素并获取与具有该元素的数组对应的键。
这是这样做的一种方法:
tab_details.each{|k, v|
return key = k if tab_details[k].include? '1'
}
有没有其他最佳方法来处理这个问题?
解决方案
一种(不那么直接)的方法是通过扩展每个数组以使每个元素成为键来反转哈希:
tab_details = {
'foo' => [2, 3, 5],
'bar' => [1, 4, 6]
}
# => {"foo"=>[2, 3, 5], "bar"=>[1, 4, 6]}
inverted_hash = tab_details.each_with_object({}) do |(k, ary), out|
ary.each { |elem| out[elem] = k }
end
# => {2=>"foo", 3=>"foo", 5=>"foo", 1=>"bar", 4=>"bar", 6=>"bar"}
input = 1
inverted_hash[input]
# => "bar"
现在,当然,它假定input
和 数组元素的类型相同,即整数。您可以将它们转换为 acc。对于您的问题中给出的内容:
# If all the array elements are strings
inverted_hash[input.to_s]
# => "bar"
它做出的另一个假设是,多个数组中不存在任何元素。
推荐阅读
- php - PHP file_get_contents 获取组合 GET POST 方法的结果
- java - MalformedURLException 除了协议(方案)的正确性之外,不关心 URL 的正确性吗?为什么?
- angular - Angular:具有布尔值的方法与不工作的组件共享
- c++ - 为什么我的简单链表在第一个节点之后不起作用?
- html - Z-index is not working; can't figure out why.
- javascript - Is For...In loop only option to create an object?
- javascript - What is the difference between "(.....);" and "{......}" in react?
- pandas - Is there a way to force spark workers to use a distributed numpy version instead of the one installed on them?
- angular - 在 Angular 7 中-如何禁用 chrome 自动填充和管理密码选择列表
- android - Android双簧管库在声音的开始/结束处点击