> 方法一:
localfunctionDoTest()
array = {}
for i = 1,4do
array[i] = {}
for j = 1,4do
array[i][j] = 12endendfor i = 1,4dofor j = 1,4do
print(array[i][j])
endendend
> 方法二:
localfunctionDoTest()local array = {}
for i = 1,4dofor j = 1,4do-- 这里是一种计算偏差,这其实相当于一个一维连续数组了。
array[(i - 1) * 4 + j] = 12endendfor k = 1,4dofor v = 1,4do
print(array[(k - 1) * 4 + v])
endendend
Lua链表实现
list = nil
for i = 1,100 do
-- 这里next = list不太理解,它是怎么找到下一个的list的呐?
list = {next = list,value = i}
end
local l = list
while l do
print(l.value)
l = l.next
end
-- 其实我还是详细理解了一下,但我理解出来的结果是这样的。
-- 上面的一句其实好像先自己弄了一个不知道哪来的相同结构表,
-- 然后再把这个表给上一个list,所以我发现输出结果是倒序的。
temp = {}
-- 这里的list 实际上就是刚声明的那个nil,把nil赋值给新的表的next -- 但是如果是第二次添加的话,这个list就是指第一个添加的list了,依此类推。
-- 其实这里是最不理解的了,它是怎么知道我现在是第几个表的哇?
-- 大约过了5分钟。。。
-- 我现在明白了,因为list是一个全局变量,再我最后一句赋值后,下次再进来的时候,
-- 明显他的next就是上次赋值后的那个list了,然后依此类推,并且它们是包括与被包括的。
-- next的值是另一个table,然后table里还有table。。。
temp.next = list
temp.data = var
list = temp
Lua队列
-- 这里想到的就是双端,每一端都是独立的一个队列。可以理解为一个x轴,-- pushfirst越多,first值越小,依此类推。local List = {}
function List.new()
return { first = 0,last = -1 }
end
function List.pushfirst(list,value)
localfirst = list.first - 1list.first = firstlist[first] = value
end
function List.pushlast(list,value)
locallast = list.last + 1list.last = lastlist[last] = value
end
function List.popfirst(list)
localfirst = list.firstiffirst > list.lastthenerror("list is empty") endlocal value = list[first]
list[first] = nil
list.first = first + 1 return value
end
function List.poplast(list)
locallast = list.lastiflist.first > list.lastthenerror("list is empty") endlocal value = list[last]
list[last] = nil
list.last = last - 1 return value
endlist = List.new()
List.pushfirst(list,1990)
List.pushlast(list,1991)
print(List.popfirst(list))
print(List.poplast(list))