Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lua哈希表,表索引为零?_Lua_Hashtable_Null_Lua Table - Fatal编程技术网

lua哈希表,表索引为零?

lua哈希表,表索引为零?,lua,hashtable,null,lua-table,Lua,Hashtable,Null,Lua Table,我目前正在尝试做的是创建一个包含电子邮件地址(作为键)的表,其中包含person_记录(作为值)。其中person_记录中包含6个左右的内容。我遇到的问题是,当我尝试将电子邮件地址分配为表的键时,它会抱怨并说表索引为零。。。这就是我到目前为止所做的: random_record = split(line, ",") person_record = {first_name = random_record[1], last_name = random_record[2], email_address

我目前正在尝试做的是创建一个包含电子邮件地址(作为键)的表,其中包含person_记录(作为值)。其中person_记录中包含6个左右的内容。我遇到的问题是,当我尝试将电子邮件地址分配为表的键时,它会抱怨并说表索引为零。。。这就是我到目前为止所做的:

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
我编写了自己的split函数,它基本上接受一行输入,提取出6个逗号分隔的值,并将它们存储在一个表中(random_record)

当我试图说email\u table[person\u record.email\u address]=person\u record时,我遇到了一个错误。 但是当我打印出person\u record.email\u address时,它不是nil,而是打印出我存储在其中的字符串。。我很困惑

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
功能拆分(str、pat)
局部t={}——注意:在Lua-5.0中使用{n=0}
本地fpat=“(.-)”。。拍打
本地最后\u端=1
局部s,e,cap=str:find(fpat,1)
当我们做的时候
如果s~=1或cap~='',则
表.插入(t,cap)
结束
最后一端=e+1
s、 e,cap=str:find(fpat,last_end)
结束

如果last_end以下代码是从您的示例复制和粘贴的,并且运行良好:

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没有“哈希表”。它只是有存储键/值对的“表”。这些是否使用哈希是一个实现细节。

它看起来像是在一些包含逗号分隔数据的行上进行迭代。
查看您的拆分函数,只要在特定行中找不到更多分隔符(,)符号,它就会停止。因此,向它输入任何少于3个分隔字段的内容(对于非常常见的示例,文件末尾的空行),将生成一个不上至[3]的表。对任何空表值进行寻址都将返回一个nil,因此person_record.email_address也将在代码的第二行设置为nil。然后,当您尝试使用person\u record.email\u地址中存储的此nil作为第3行中电子邮件表的索引时,您将得到您提到的确切错误。

您可以发布您得到的确切错误消息吗?不幸的是,这是确切的错误消息:(“表索引为nil”啊。好的。我的教授说lua只有哈希表,但我不同意:p。我对email_table所做的只是通过email_table={}初始化它,然后我给它分配上面的代码。我知道它不是零,因为我可以说email_table[“哈哈”]=person\u record,它可以工作。我不明白为什么它不允许person\u record。电子邮件地址…太奇怪了…谢谢!:)我对lua有很多问题,因为我才刚开始。我可能会回来的:多疑的尼科尔,你能告诉我为什么我的分手不起作用吗?它基本上是基于delimeter将一行拆分,然后将值存储到表中。我已经为我的拆分添加了代码function@cj1098:这是一个不同的问题,你应该用“提问”按钮提问。