-2

我在比较两个哈希中的值时遇到问题,出现错误“无法将字符串转换为整数”。第一个散列具有使用方法“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

4 回答 4

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 

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

这完全取决于数据的形状。

于 2013-07-24T07:07:49.270 回答
0

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

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

谢谢,

维拉。

于 2013-07-25T04:38:09.530 回答
0

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

于 2013-07-24T06:52:34.423 回答
-1

最好直接调试loan_data和@report_data的内容,但是可以试试.to_sym把key转换成symbol。

loan_data.map{|ld| ld['MainContent_cphContent_LoanOverViewGeneralInfoCtrl_lblRelName'.to_sym]} &
@report_data.map{|rd| rd['Relationship'.to_sym]}
于 2013-07-24T07:09:25.383 回答