You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:31:56