【问题标题】:Get the Key Value Pairs from a nested Hash when given a Value给定值时从嵌套哈希中获取键值对
【发布时间】:2016-02-22 20:39:24
【问题描述】:

我有一个嵌套哈希 pdf_hash,它具有三个公共键 :x:y:text。 我知道键 :text 的值。现在我必须浏览 PDF 的每一页,并为给定的 :text => value 获取 :x:y 的键值对。

这是我当前的代码:

def deep_find(pdf_hash, value, found=nil)
  if pdf_hash.respond_to?(:value?) && pdf_hash.value?(value)
    return pdf_hash[:x] && pdf_hash[:y]
    puts pdf_hash[:x] && pdf_hash[:y]
  elsif pdf_hash.is_a? Enumerable
    pdf_hash.find {|*a| found = deep_find(a.last, value) }
    return found
  end
end

deep_find(coordinates, "YOUR DUE DATE CHANGE REQUEST")

但它没有打印任何结果。

我也试过 value = "您的截止日期更改请求"

texts = coordinates.map do|page|
 page[:lines].find {|a| a[:text] == value}
 puts "#{:x} && #{:y}"
end

这是打印 x && y 每次找到给定值时。 但我也需要 x 和 y 的值。 如何打印键和值?

【问题讨论】:

  • 我不明白你为什么在这里面有个问号:(:value?)
  • @JohnMessenger 因为他们正在测试pdf_hash 是否响应名为value? 的方法(在同一行调用)。
  • 比较给定的值和Hash中的值

标签: ruby-on-rails ruby hashmap


【解决方案1】:

它没有打印任何内容,因为您在 之后 return 行有puts。到达return 后,不会执行方法中的任何代码。

【讨论】:

  • 我也尝试在 Returns 的同一行打印。但它给出了语法错误。那我在哪里打印呢?
  • 如果不查看代码,我无法诊断语法错误。您应该在 return 之前打印,或者您应该打印方法返回的值(即将puts 放在您的方法之外,而不是在其中)。
  • 我这样做了 deep_find(coordinates, "YOUR DATE DATE CHANGE REQUEST") 但没有变化。
  • 尚不清楚您为什么要在此方法中打印任何内容。您只是出于调试目的而打印吗?否则,您应该只在方法之外打印该方法返回的结果。你不能只用puts替换return,因为puts返回nil
  • 我需要打印方法返回的结果。我试过 value = "YOUR DUE DATE DATE CHANGE REQUEST" texts = coordinates.map do|page| page[:lines].find {|a| a[:text] == value} puts "#{:x} && #{:y}" end 但是它打印的是键而不是值 x && y。我需要哈希的键和值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 2014-10-17
  • 2017-04-16
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多