Lua基础--迭代器和表

本文介绍了Lua中的迭代器,包括ipairs和pairs的区别,如ipairs遇到空时停止,pairs则不会。此外,讲解了如何自定义迭代函数,并详细阐述了table的定义、基本使用,如拼接、插入、删除操作,以及排序和查找最大值的方法。
摘要由CSDN通过智能技术生成

多维数组

arr = {{},{},{}}
for i=1,3 do
	for j=1,2 do
		arr[i][j] = i+j
	end
end
  • 需要先构建空的数组,之后再赋值或遍历

ipairs和pairs的区别

array = {"Lua","C#","Java"}
array[2] = nil
for k,v in pairs(array) do
	print(k,v)
end
for k,v in ipairs(array) do
	print(k,v)
end

区别:

  • ipairs 遇到中间为空时就停止遍历,pairs会继续遍历完

自定义迭代函数

function iter (a, i)
    i = i + 1
    local v = a[i]
    if v then
       return i, v
    end
end
 
function ipairs (a)
    return iter, a, 0
end

arr = {3,5,1,2}
for k,v in ipairs(arr) do
	print(k,v)
end
  • 三个参数,迭代函数,状态变量和控制变量

table的定义和基本使用

mytable = {}
mytable[1] = "lua"
--将单独一个键销毁
mytable[1] = nil
--将整个表销毁,相当于垃圾回收
mytable = nil
mytable = {}
print(type(mytable))
mytable[1] = "lua"
mytable["name"] = "skil"
--相当于python种的引用赋值
newtable = mytable
print(newtable[1])
print(mytable[1])
newtable[1] = "C#"
print(newtable[1])
print(mytable[1])
--单独置空一个变量,不会销毁值,相当于引用计数吧,计数为0才销毁
mytable = nil
print(newtable.name)
--当都为空的时候才会没有name
newtable=nil

table 拼接插入删除

mytable = {"Lua","C#","Java","C++","C"}
--concat拼接表中元素,第二个位置指定符号拼接,第三和第四个位置为指定开始位置和结束位置
print(table.concat(mytable))
print(table.concat(mytable,","))
print(table.concat(mytable,' ',2,4)) 

mytable[#mytable+1] = "PHP" --通过计算长度来取到最后一个值
print(mytable[#mytable])
table.insert(mytable,"Python") --insert默认插在最后
table.insert(mytable,2,"BOO") --第二个参数为指定插入的位置
print(mytable[#mytable])
mytable[2] = nil
print(mytable[2]) -- 会直接打印空
table.remove(mytable,2) --删除完之后,其他元素会向前移动
print(mytable[2]) 	
  • table.concat(表,”拼接符号“,”起始位置“,”结束位置“)
  • table.insert(表,”插入位置“,“插入的值”)
  • table.remove(表,删除的位置)

table排序和取最大值

mytable = {2,3,4,55,3,21,21,3,1,1,541,32,3,51,432,3,332}

print("排序前")
for k,v in pairs(mytable) do
	print(k,v)
end
table.sort(mytable)
print("排序后")
for k,v in pairs(mytable) do
	print(k,v)
end

function max_number( tab )
	-- body
	max = 0
	for k,v in ipairs(tab) do
		if v>max then
			max =v
		end
	end
	return max
end
--function max_number( tab )
	-- body
	--table.sort(tab)
	--return tab[#tab]
--end
print(max_number(mytable))

  • table.sort(表) 进行排序
  • 取最大值,自定义函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值