如何在Ruby嵌套Hash中根据user_id获取完整内部Hash
根据特定user_id获取完整嵌套Hash的解决方案
你现在手里有这样一个包含列表数据的Hash:
req = { "count" => 50100, "results" => [ {"listing_id" => 615929315, "state" => "active", "user_id" => 140604756, "category_id" => 69150367}, {"listing_id" => 615929311, "state" => "active", "user_id" => 152528025, "category_id" => 69150367} ] }
之前你尝试用req["results"][0].select{|key, value| value == 152528025},只能拿到{"user_id" => 152528025}这个单个键值对,但其实只需要调整一下查找的层级,就能直接拿到完整的嵌套Hash啦。
方案1:获取单个匹配的完整Hash(适合user_id唯一的场景)
如果你的数据里每个user_id只会出现一次,用find方法最直接——它会遍历results数组,返回第一个符合条件的完整元素:
target_user_id = 152528025 matching_item = req["results"].find { |item| item["user_id"] == target_user_id } # 输出结果:{"listing_id"=>615929311, "state"=>"active", "user_id"=>152528025, "category_id"=>69150367}
方案2:获取所有匹配的完整Hash(适合存在重复user_id的场景)
如果数据里可能有多个相同user_id的条目,用select方法可以返回所有符合条件的元素组成的数组:
target_user_id = 152528025 all_matching_items = req["results"].select { |item| item["user_id"] == target_user_id } # 输出结果:[{"listing_id"=>615929311, "state"=>"active", "user_id"=>152528025, "category_id"=>69150367}]
核心区别就是:你之前是在单个Hash元素里筛选键值对,现在要把判断逻辑放到外层的results数组上,直接定位整个符合条件的数组元素就好啦。
内容的提问来源于stack exchange,提问作者Maayan Naveh
相关产品推荐
相关产品推荐

