lua中,in pairs的循环的顺序问题

lua中,in pairs的循环的顺序问题
t = {a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9}
str = ""
for i,v in pairs(t) do
x05str = str..v..","
end
print(str)
输出是
1,3,2,5,4,7,6,9,8,
怎么才能让他输出1,2,3,4,5,6,7,8,9,主要是我希望他输出的列顺序与原表中的列顺序相同
额..这已经是简化版本了,这是一个二维或者三维的table,因为多个数组使用的是一个函数来进行数组输出的功能,所以输出的函数中包含有获取元素中的列名的功能.可是输出之后就是每行数据都是这样的效果.
function player_tab_create(player_tab,number)x05x05--建立player表
x05for i = 1,number,1 do
x05x05table.insert(player_tab,{id = table.getn(player_tab)+1 ,w_times = 0 ,l_times = 0 ,w_weight = 1,pexp = 0,bexp = 0,lv = 1,groupid = 1})
x05end
x05return player_tab
end
function out_tab(tab,lnlist)x05x05x05x05--输出二维数组
x05local temp = {}
x05for _,sub in pairs(tab) dox05x05x05x05--获得列名
x05x05for k,v in pairs(sub) do
x05x05x05temp[k] = 1
x05x05end
x05end
x05if lnlist = nil then
x05x05temp = lnlist
x05end
x05local str
x05for i = 1,table.getn(tab),1 do
x05x05str = ""
x05x05for k,v in pairs(temp) do
x05x05x05if tab[i][k] == nil then
x05x05x05x05the_vaule = -1
x05x05x05else
x05x05x05x05the_vaule = tab[i][k]
x05x05x05x05str = str..k.." =t "..the_vaule..",t"
x05x05x05end
x05x05end
x05x05out(str)
x05end
end
zhjiaqun 1年前 已收到1个回答 举报

48526999 幼苗

共回答了19个问题采纳率:94.7% 举报

用pairs就是没顺序,随机的,跟k的哈希值有点关系.
t={1,2,3,4,5,6,7,8,9}--必须是这样的table,元素必须要要用table.insert插入,用ipairs遍历,这种table相当于t[1]=1,t[2]=2...t[9]=9,如果后面有个t[11]=11,那么用ipairs就遍历不到.原因是table里面分两部分,数组和hash表,t[1],t[2]等连续的是相当于数组部分,不连续的索引都放hash表里了,顺序不一定.
str = ""
for i,v in ipairs(t) do
str = str..v..","
end
print(str)

1年前 追问

10

zhjiaqun 举报

谢谢回答,是这样的,我现在的问题是要保持列名的顺序,里面的值很有可能是没有顺序的,所以直接按值排序是不行的,代码我放在了问题补充了,麻烦在看下呗... -------借个地方,问题补充放不下了------- 在输出了本来想用lnlist来存放一个数组来存放输出顺序,可是in pairs输出的还是无序的

举报 48526999

用下面这个 function out_tab(tab,lnlist) --输出二维数组 local keys = lnlist or {} if lnlist == nil then local temp = {} for _,sub in pairs(tab) do --获得列名 for k,v in pairs(sub) do temp[k] = 1 end end for k,v in pairs(temp) do table.insert(keys,k) end end local str for i = 1, table.getn(tab), 1 do str = "" for _,key in ipairs(keys) do if tab[i][key] == nil then the_vaule = -1 else the_vaule = tab[i][key] str = str..key.." =t "..the_vaule..",t" end end out(str) end end -------------------------------------- --这么调用 t = {} player_tab_create(t,10) out_tab(t,{"id","w_times","l_times","w_weight","pexp","bexp","lv","groupid"})
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.032 s. - webmaster@yulucn.com