遇到Ruby哈希问题

时间:2010-09-17 10:23:45

标签: ruby

我正在使用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,它会显示为哈希中的一个键......?我非常困惑 - 我做错了什么?奇怪的是,数据类型出现了什么?

干杯

2 个答案:

答案 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)