Lua资料之控制结构示例(特殊)

◆ 控制结构if-else:

score = 90
if score == 100 then
    print("Very good!Your score is 100")
elseif score >= 60 then
    print("Congratulations, you have passed it,your score greater or equal to 60")
--此处可以添加多个elseif
else
    print("Sorry, you do not pass the exam! ")
end

◆ Lua中没有continue关键字

◆ while 型控制结构:

x = 1
sum = 0
while x <= 5 do
    sum = sum + x
    x = x + 1
end
print(sum)  -->output 15

◆ repeat 控制结构
lua 中的 repeat 控制结构类似于其他语言(如:C++ 语言)中的 do-while,但是控制方式是
刚好相反的。执行 repeat 循环体后,直到 until 的条件为真时才结束,而其他语言(如:C++ 语言)的 do-while 则是当条件为假时就结束循环。
以下代码将会形成死循环:

x = 10
repeat
    print(x)
until false

◆ for 控制结构
1.数字型 for 的语法

for var = begin, finish, step do
    --body
end

2.泛型 for 循环
泛型 for 循环通过一个迭代器(iterator)函数来遍历所有值:

local a = {"a", "b", "c", "d"}
for i, v in ipairs(a) do
  print("index:", i, " value:", v)
end
-- output:
index:  1  value: a
index:  2  value: b
index:  3  value: c
index:  4  value: d

Lua 的基础库提供了 ipairs,这是一个用于遍历数组的迭代器函数。在每次循环中,i 会被赋予一个索引值,同时 v 被赋予一个对应于该索引的数组元素值。

标准库提供了几种迭代器,包括用于迭代文件中每行的(io.lines)、 迭代 table 元素的(pairs)、迭代数组元素的(ipairs)、迭代字符串中单词的(string.gmatch)等.

◆ for循环特殊例子:
假设有这样一个 table,它的内容是一周中每天的名称:

local days = {
  "Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"
}

现在要将一个名称转换成它在一周中的位置。为此,需要根据给定的名称来搜索这个 table。然而 在 Lua 中,通常更有效的方法是创建一个“逆向 table”。例如这个逆向 table 叫revDays,它以 一周中每天的名称作为索引,位置数字作为值:

local revDays = {
    ["Sunday"] = 1,
    ["Monday"] = 2,
    ["Tuesday"] = 3,
    ["Wednesday"] = 4,
    ["Thursday"] = 5,
    ["Friday"] = 6,
    ["Saturday"] = 7
  }

接下来,要找出一个名称所对应的需要,只需用名字来索引这个 reverse table 即可:

local x = "Tuesday"
print(revDays[x])  -->3
36
for

当然,不必手动声明这个逆向 table,而是通过原来的 table 自动地构造出这个逆向table:

local days = {
   "Monday", "Tuesday", "Wednesday", "Thursday",
   "Friday", "Saturday","Sunday"
}
local revDays = {}
for k, v in pairs(days) do
  revDays[v] = k
end
-- print value
for k,v in pairs(revDays) do
  print("k:", k, " v:", v)
end
-- output:
k:  Tuesday   v: 2
k:  Monday    v: 1
k:  Sunday    v: 7
k:  Thursday  v: 4
k:  Friday    v: 5
k:  Wednesday v: 3
k:  Saturday  v: 6

这个循环会为每个元素进行赋值,其中变量 k 为 key(1、2、…),变量 v 为
value(“Sunday”、”Monday”、…)。

猜你喜欢

转载自blog.csdn.net/sky6even/article/details/81709911
今日推荐