2012-04-02 59 views
1

我目前正在嘗試做的是製作一個電子郵件地址表(作爲鍵),它保存了person_records(作爲值)。 person_record在其中包含6個或多個事物。我得到的問題是,當我嘗試分配的電子郵件地址作爲關鍵它抱怨,說表索引是零表...這是我到目前爲止有:lua哈希表,表索引是否爲零?

random_record = split(line, ",") 
person_record = {first_name = random_record[1], last_name = random_record[2], email_address = random_record[3], street_address = random_record[4], city = random_record[5], state = random_record[6]} 
email_table[person_record.email_address] = person_record 

我寫的我自己的分割函數,基本上需要一行輸入,並拉出6個逗號分隔值並將它們存儲在一個表中(random_record)

我試圖說email_table [person_record.email_address] = person_record時出現錯誤。 但是,當我打印出person_record.email_address它不是零,它打印出我存儲在其中的字符串..我很困惑。

function split(str, pat) 
    local t = {} -- NOTE: use {n = 0} in Lua-5.0 
    local fpat = "(.-)" .. pat 
    local last_end = 1 
    local s, e, cap = str:find(fpat, 1) 
    while s do 
     if s ~= 1 or cap ~= "" then 
    table.insert(t,cap) 
     end 
     last_end = e+1 
     s, e, cap = str:find(fpat, last_end) 
    end 
    if last_end <= #str then 
     cap = str:sub(last_end) 
     table.insert(t, cap) 
    end 
    return t 
end 
+0

你能發佈你得到的確切的錯誤消息嗎? – 2012-04-02 00:24:39

+0

不幸的是,這是確切的錯誤消息:( 「表索引是零」 – cj1098 2012-04-02 00:26:57

回答

2

下面的代碼是複製並從你的榜樣粘貼並運行得很好:

email_table = {} 
random_record = {"first", "second", "third"} 
person_record = {first_name = random_record[1], last_name = random_record[1], email_address = random_record[1]} 
email_table[person_record.email_address] = person_record 

所以你的問題是你split功能。

順便說一句,Lua沒有「hashtables」。它只是具有存儲鍵/值對的「表」。這些恰好是否使用哈希是一個實現細節。

+0

啊。好的..我的教授說lua只有散列表,但我不同意: 所有我對email_table做的是通過email_table初始化它= {} 然後,我把它分配上面的代碼..我知道這不是零,因爲我可以說像email_table [「HAHA」] = person_record的東西,它的工作原理。我只是不明白爲什麼它不會允許person_record.email_address ... – cj1098 2012-04-02 00:33:46

+0

@ cj1098:我更新了我的帖子。 – 2012-04-02 00:36:30

+0

多數民衆贊成在很奇怪...謝謝!:)我有很多關於盧阿的問題,因爲我剛剛開始。我可能會回來:D – cj1098 2012-04-02 00:44:43

0

它看起來像迭代了一些行中有逗號分隔的數據。 看看你的分割函數,只要沒有更多的分隔符(,)符號在特定的行中找到,它就會停下來。因此,給它提供少於3個分隔字段的任何東西(對於非常常見的例子:文件結尾處的空行)將產生不會達到[3]的表格。解決任何空表值將返回一個零,所以person_record.email_address將設置爲零,以及您的代碼的第二行。然後,當您嘗試使用存儲在person_record.email_address中的這個nil作爲第三行中的email_table的索引時,您將得到您提到的確切錯誤。