Ruby在哈希数组中查找值并返回完整哈希的技术问题
解决Ruby哈希数组查找问题
先来说说你代码里的几个问题,再给你正确的实现方式:
问题1:键类型不匹配
你第一个代码里用article.key?("xy.id")找不到键,是因为你的哈希键是符号类型(:"xy.id"),而你传入的是字符串"xy.id"——Ruby里符号和字符串是完全不同的对象,所以匹配不上。如果要判断这个键是否存在,应该用符号:
@articles.each do |article| test_article = article.key?(:"xy.id") puts test_article # 现在会输出true了 end
问题2:错误的查找逻辑
你第二个代码的select条件写反了:你要判断的是键对应的值是否等于目标ID,而不是键本身等于ID。而且同样要注意用符号键来取值。
正确的实现方式
如果你想找到第一个匹配的完整article哈希,用find方法(它会返回第一个符合条件的元素):
@articles = [{:"xy.id"=>["ID_100"], :"xy.url"=>["http://websiteA.com"], :TestQuestions=>["A//B/C//D, apple"]}, {:"xy.id"=>["ID_200"], :"xy.url"=>["http://websiteB.com"], :TestQuestions=>["E//F/G//H, orange"]}] # 查找xy.id为["ID_200"]的article target_article = @articles.find do |article| article[:"xy.id"] == ["ID_200"] end puts target_article.inspect # 输出完整的哈希条目
如果你的数组里可能有多个匹配的article,用select方法(它会返回所有符合条件的元素组成的数组):
target_articles = @articles.select do |article| article[:"xy.id"] == ["ID_200"] end puts target_articles.inspect # 输出所有匹配的哈希数组
另外,你第三个代码里的doc.each应该是article.each吧?那是遍历哈希的键值对,本身没问题,但和你的查找需求无关。
内容的提问来源于stack exchange,提问作者random_user_0891
相关产品推荐
相关产品推荐

