几年后我正在重新学习编程,目前我正专注于C#和Lua。我为Lua使用的这本书有一个链接列表的例子,但是我很难理解它是如何工作的。
list = nil
for line in io.lines() do
list = {next = list, value = line}
end
如果我正在读这个
然后在循环的下一次运行
我只是想确定我确切地理解了这是如何工作的,因为列表正在尝试创建一个表并指向当前指向的任何内容,直到执行完成的行之前有点奇怪/奇怪并且列表已更新为指向最新创建的表。
还是我离开这里?
答案 0 :(得分:4)
这有点类似于LIFO链接列表在其他语言中的含义(如c或c++)。是的,你正确地关注它。
假设我的输入是:(按相同的顺序)
然后,我的list
创建为:
list = {
value = "No",
next = {
value = 35,
next = {
value = "Hi",
next = {
value = 21
next = nil
}
}
}
}
答案 1 :(得分:0)
基本上,正在发生的是,在for循环中,您正在创建一个表,而next
键最初是nil。在随后的循环中,您将再次创建表,并使用list
变量将其分配给next
键,该键现在是对上一个表的引用,依此类推。
我给你举个例子。
for i=1,3 do
list = {int=i, next=list}
end
执行此操作时,第一个next
键将为nil,因为尚未定义list
。但是在下一个表中,其next
键将是对上一个表的引用,依此类推。如果尝试打印list.int
和list.next
,则它们将引用int = 3的表,因为for循环以3结尾,因此变量引用了该部分。如果需要更改此设置,只需将数字for循环更改为
for i=3,1,-1 do
所以它实际上看起来像这样:
list = {int=1, next=nil}
list = {int=2, next=previousTable}
list = {int=3, next=previousTable}
或
list = {
int=3,
next = {
int=2,
next = {
int=1,
next=nil
}
}
}
希望这会有所帮助。