求解该程序的输出,小弟实在不明白啊
lua吧
全部回复
仅看楼主
level 1
Einsxu 楼主
Set = {}
function Set.new(l)
local set = {}
for k,v in ipairs(l) do
set[v] = true
end
return set
end
function Set.union(a,b)
local res = Set.new{}
for k in pairs(a) do res[k] = true end
for k in pairs(b) do res[k] = true end
return res
end
function Set.tostring(set)
local l = {}
for v in pairs(set) do
l[#l+1] = v
end
return "{" .. table.concat(l,",") .. "}"
end
function Set.print(s)
print(Set.tostring(s))
end
s1 = Set.new{10,20,30,40,50}
Set.print(s1)
请问这个输出怎么是20,10,40,30,50啊
这个是第13章的例子
2012年08月01日 09点08分 1
level 2
lua里面遍历数组的时候不一定按照顺序的...
2012年08月14日 03点08分 2
level 6
有点像闭包啊。。但感觉有点不太得劲
2013年02月25日 08点02分 3
level 8
明明就是个没开头的空项目输出啥啊
2013年02月26日 19点02分 4
level 6
因为pairs是遍历字典的方式,ipairs是遍历数组的方式,字典无序数组有序。
这里因为是稀疏数组,在Lua里是不支持按照数组方式迭代的,所以只能用pairs当做字典迭代。
2013年02月27日 09点02分 5
level 7
有点像闭包啊。。但感觉有点不太得劲
lua里面遍历数组的时候不一定按照顺序的..
2013年03月06日 04点03分 6
level 7
Set.tostring(set)原因在这个函数里面
函数接受的参数是一个table。
经过Set.new(l)的处理返回的table是(set):{[10] = true, [20] = true, [30] = true,[40] = true,[50] = true}
然后再看Set.tostring(set),里面是for是通过pairs来遍历的。如楼上所说pairs不是按数组下标顺序来遍历的。按顺序遍历的是ipairs,所以最后得到的结果就是这样咯~[不要]
(PS:自问讲的很清楚,还不懂就回去看书吧)
2013年03月06日 07点03分 7
1