Ruby嵌套哈希匹配内层键值对时如何获取对应外层键
解决方法
你可以使用Hash#find方法实现需求,该方法遍历哈希时会返回第一个符合匹配条件的[外层键, 内层哈希]结构数组,取数组首个元素即可得到目标外层键:
# 获取name为email对应的外层键 email_key = jotform.find { |_key, inner_hash| inner_hash['name'] == 'email' }&.first # 示例返回值:"10" # 获取name为name对应的外层键 name_key = jotform.find { |_key, inner_hash| inner_hash['name'] == 'name' }&.first # 示例返回值:"5"
如果你不需要外层键,想直接取目标值可以直接调用:
# 直接取邮箱值 email = jotform.find { |_k, v| v['name'] == 'email' }&.last&.dig('answer') # 示例返回值:"picco@example.com" # 直接取格式化姓名 formatted_name = jotform.find { |_k, v| v['name'] == 'name' }&.last&.dig('prettyFormat') # 示例返回值:"Example"
说明
find匹配到第一个符合条件的条目就会终止遍历,相比你之前用的select遍历全量哈希的效率更高- 代码中的
&.是Ruby的安全导航操作符,当未匹配到对应字段时会返回nil,不会抛出空指针异常,你可以根据业务逻辑补充兜底的默认值设置
内容的提问来源于stack exchange,提问作者Roberto Pezzali
相关产品推荐
相关产品推荐

