我的学习C#回炉学习日志——Lua热更新04_数组和迭代器

数组

-默认 索引从1开始,默认0为nil(可以指定0开始,或者负数开始)

arry = {"Lua","Tutorial"}
for i=0,2 do
	print(arry[i])
end
--结果:nil lua Tutorial
  • 多维数组
array = {}
for i=1,3 do
	--array[i] ={}
	for j=1,3 do
		array[i][j]=i*j
		print("i=",i,"j=",j,"值:",array[i][j])
	end
end

迭代器

  • 定义:一种对象,遍历元素,在lua中支持指针类型结构(标指:in)
  • 先计算迭代函数,再赋值给状态常量,用控制变量遍历
  • ipairs():lua提供的迭代函数,用于迭代数组

  • 泛型for迭代器

重点:泛型for迭代器就是向for返回“迭代函数”(iter)、“迭代常量”(a)、“控制变量”(0)
均由ipair传给for,for再将a和0传到iter()中运行,直到iter()返回的值为nil

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

–上例中iter就是需要的迭代函数,a就是需要的迭代常量,0为控制变量
–均由ipair传给for,for再将a和0传到iter()中运行,直到iter()返回的值为nil
–for k,v in ipairs(a) 等价于 for k,v in iter,a,0

array = {"第一个","第二个"}
for k,v in ipars(array) do
print(k,v)
end

–k:调用控制变量,v:调用状态常量,ipairs():用于返回迭代函数
–遍历array中每一个元素

  • 无状态迭代器

定义:不保留任何状态的迭代器(ipairs就是一种无状态迭代器)
使用:只通过控制变量和状态常量查找下一个状态

  • 多状态迭代器

前言:要理解多状态迭代器就要明白为什么引入多状态迭代器。
原因:当需要储存多个状态信息时,一个状态常量不够用了。(粗俗的说就是一次多取几个,不需要控制变量了)

array = {"第一个","第二个"}
function UseIpair(collection)
local index =0 --在此处定义了控制变量
local count = #collection
return function()
	index = index + 1
	if index<count
		then 
			--只返回迭代常量
		 	return collection[index]
	    end
	end
end
for element in elementIterator(array)
do
print(element)
end

你可能感兴趣的:(Lua,学习日志,lua)