Lua学习笔记:06-Lua语法基础(4)

Lua学习笔记:06-Lua语法基础(4)

  • 1. 数组
  • 2. 迭代器
    • 2.1 泛型 for 迭代器
    • 2.2 无状态的迭代器
    • 2.3 多状态的迭代器
  • 3. table(表)

1. 数组

Lua 索引值是以 1 为起始,但你也可以指定 0 开始。

除此外我们还可以以负数为数组索引值:

array = {}

for i= -2, 2 do
   array[i] = i *2
end

for i = -2,2 do
   print(array[i])
end

2. 迭代器

2.1 泛型 for 迭代器

for k, v in pairs(t) do
    print(k, v)
end

2.2 无状态的迭代器

无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。

每一次迭代,迭代函数都是用两个变量(状态常量和控制变量)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。

这种无状态迭代器的典型的简单的例子是 ipairs,它遍历数组的每一个元素。

以下实例我们使用了一个简单的函数来实现迭代器,实现 数字 n 的平方:

function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

for i,n in square,3,0
do
   print(i,n)
end

2.3 多状态的迭代器

3. table(表)

  • table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。
  • Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
  • Lua table 是不固定大小的,你可以根据自己需要进行扩容。
  • Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。

当我们获取 table 的长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度。可以使用以下方法来代替:

function table_leng(t)
  local leng=0
  for k, v in pairs(t) do
    leng=leng+1
  end
  return leng;
end

你可能感兴趣的:(Lua学习笔记)