我正在使用Watir和Ruby尝试将来自Web应用程序的大量数据压入哈希:
def getOrders( )
return orders = slurpOrders()
end
def containsOrderNumber( orderNumber )
puts orderNumber
orders = getOrders
puts orders[orderNumber]
#puts orders.keys
puts "orders has_key? = " + orders.has_key?(orderNumber).to_s
return orders.has_key?(orderNumber)
end
private
def slurpOrders( )
puts @browser.tables[6].row_count
rows = @browser.tables[6].rows
orders = Hash.new
for row in rows do
#puts row.column_count
if row.column_count == 8 then
order = {
:sales_channel => row[2],
:customer => row[3],
:country => row[4],
:total => row[5],
:time => row[6],
:highlight => row[7],
:credit_hold => row[8],
}
orders[ row[1] ] = order
#puts row[1]
end
end
return orders
end
所以我在另一个脚本中调用containsOrderNumber('1136050')但是orders.has_key?返回false,order [orderNumber]返回nil。
但是,如果我取消注释puts orders.keys,它会显示为哈希中的一个键......?我非常困惑 - 我做错了什么?奇怪的是,数据类型出现了什么?
干杯
答案 0 :(得分:2)
您似乎将密钥存储为整数并尝试将其作为字符串检索。您只需要保持一致(并在存储时添加转换为字符串,或在检索时将转换添加到int)。
答案 1 :(得分:2)
在进行printf调试时,请确保不要使用
puts orders.keys
但请使用
puts orders.keys.inspect
因为inspect
将允许您区分整数和字符串:
hash = {"1" => :string, 2 => :integer}
puts hash.keys # Outputs 1(newline)2(newline)
puts hash.keys.inspect # Outputs ["1", 2](newline)