比较两个哈希值

时间:2013-07-24 06:46:43

标签: ruby

我在比较两个哈希中的值时遇到问题,得到错误“无法将字符串转换为整数”。 第一个散列具有使用方法“capture_page_data(browser)”从网页捕获的值,第二个散列具有从报告解析的数据。

代码如下所示:

# Open the web application 
# Navigate to a specific page and capture page data

loan_data = Hash.new

loan_data = capture_page_data(browser)

第二个哈希具有从Web应用程序生成的报告中捕获的值 代码如下所示:

@report_data[page] = Hash.new
# we have written some logic to parse the data from the report into hash variable

现在我正在尝试比较这两个哈希中的值,以确保报告中的数据与应用程序中的数据匹配,使用下面的代码,这给出了错误“无法将字符串转换为整数”。

loan_data.map{|ld| ld['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName']} &
      @report_data.map{|rd| rd['Relationship']}

请帮我解决这个问题。

此致

威拉。

4 个答案:

答案 0 :(得分:1)

Hash#map遍历哈希,就像它是键/值对的数组一样。

{a:1,b:2}.map{|x| puts x.inspect }
# prints 
# [:a,1]
# [:b,2]

{a:1,b:2}.map{|k,v| puts "#{k} => #{v}" }
# prints 
# a => 1
# b => 2

它将您提供的块应用于每对将结果收集到一个新数组中。

result = {a:1,b:2}.map{|k,v| "#{k} => #{v}" }
puts result.inspect
# prints 
# [ "a => 1", "b => 2" ]

我猜你要做的是比较每个数组中的一个键......在这种情况下......

if loan_data[:id][:span]['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblR‌​elName'] == @report_data[1]['Relationship']
  log_message("pass")
else
  log_message("fail")
end 

可能就是你想要做的......但我只是在猜测。

这一切都取决于数据的形状。

答案 1 :(得分:0)

如果检查块内的ld变量,您会发现它是一个数组。您可以使用ld[0]ld[1]获取其中的元素,但ld[string]没有意义并导致您看到的异常。 ld数组实际上是一个包含两个元素的数组:key和value。

答案 2 :(得分:0)

感谢您的建议..但我找到了一个不同的解决方案来比较两个哈希/数组中的单个密钥,使用下面的代码工作正常。

string_equals?(loan_data [:id] [:span] ['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName'],@ report_data [1] ['Relationship'])

谢谢,

威拉。

答案 3 :(得分:-1)

最好直接调试loan_data和@report_data的内容,但你可以尝试.to_sym将密钥转换为符号。

loan_data.map{|ld| ld['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName'.to_sym]} &
@report_data.map{|rd| rd['Relationship'.to_sym]}