Lua 教程 在线

2048Lua 字符串

将阿拉伯数字转换为语文汉字数字:

local function NumToCN(num)
    local size = #tostring(num)
    local CN = ""
    local StrCN = {"一","二","三","四","五","六","七","八","九"}
    for i = 1 , size do
        CN = CN .. StrCN[tonumber(string.sub(tostring(num), i , i))]
    end
    return CN
end
print(NumToCN(56665))

2047Lua 运算符

若要在Lua中实现 C/C++ 中的三目运算

condition ? result1 : result2

可以简单地这样:

if condition then
    return result1
else
    return result2
end

但是要想使用 Lua 的逻辑运算符实现就需要一些小技巧,写法如下(具体可查看Lua 中的三目运算符

(condition and {result1} or {result2})[1]

2046Lua 运算符

取长度操作符写作一元操作 #

table t 的长度被定义成一个整数下标 n 。 它满足 t[n] 不是 nil 而 t[n+1] 为 nil; 此外,如果 t[1] 为 nil ,n 就可能是零。 对于常规的数组,里面从 1 到 n 放着一些非空的值的时候, 它的长度就精确的为 n,即最后一个值的下标。 如果数组有一个“空洞” (就是说,nil 值被夹在非空值之间), 那么 #t 可能是指向任何一个是 nil 值的前一个位置的下标 (就是说,任何一个nil 值都有可能被当成数组的结束)。

tab4 = {}
tab4[1] = "1"
tab4[2] = nil
tab4[3] = "2"
tab4[4] = nil
print("tab4的长度", #tab4)

--tab4的长度    1

tab5 = {}
tab5[1] = "1"
tab5[2] = nil
tab5[3] = "2"
tab5[4] = "4"
print("tab5的长度", #tab5)

--tab5的长度    4

tab6 = {1, nil, 3}
print("tab6的长度", #tab6)

--tab6的长度    3

tab6 = {1, nil, 3, nil}
print("tab6的长度", #tab6)

--tab6的长度    1

更多内容可参考:lua table 长度解析

2045Lua 运算符

下标越过 1 位以上,长度还是为 2:

tab3={}
tab3[1]="1"
tab3[2]="2"
tab3[5]="5"
print("tab3的长度",#tab3)

输出:

tab3的长度    2

2044Lua 运算符

其他运算符 —— #

在获取表的长度时,根据的是表的最大索引的值:

tab1 = {"1","2"}
print("tab1长度"..#tab1)
tab2 = {key1="1","2"}
print("tab2长度"..#tab2)
tab3 = {}
tab3[1]="1"
tab3[2]="2"
tab3[4]="4"
print("tab3长度"..#tab3)

输出:

tab1长度2
tab2长度1
tab3长度4