Lua 教程 在线

2053Lua 迭代器

pairs 和 ipairs异同

同:都是能遍历集合(表、数组)

异:ipairs 仅仅遍历值,按照索引升序遍历,索引中断停止遍历。即不能返回 nil,只能返回数字 0,如果遇到 nil 则退出。它只能遍历到集合中出现的第一个不是整数的 key。

pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回 nil。

栗子1:

local tabFiles = {
        [1] = "test2",
        [6] = "test3",
        [4] = "test1"
    }

for k, v in ipairs(tabFiles) do    --输出"test2",在key等于2处断开
    print(k, v)
end

栗子2:

local tabFiles = {
    [2] = "test2",
    [6] = "test3",
    [4] = "test1"
}

for k, v in ipairs(tabFiles) do  --[[什么都没输出,为什么?因为控制变量初始值是按升序来遍历的,当key为1时,value为nil,此时便停止了遍历, 所有什么结果都没输出]]--
    print(k, v)
end

栗子3:

local tabFiles = {
    [2] = "test2",
    [6] = "test3",
    [4] = "test1"
}

for k, v in pairs(tabFiles) do  --输出2 test2, 6 test3, 4 test1
    print(k, v)
end

栗子4:

local tabFiles = {"alpha", "beta", [3] = "no", ["two"] = "yes"}  for i,v in ipairs(tabFiles ) do    --输出前三个   备注:因为第四个key不是整数
    print( tabFiles [i] )   
end   
  
for i,v in pairs(tabFiles ) do    --全部输出   
    print( tabFiles [i] )   
end 

2052Lua 迭代器

pairs 和 ipairs区别

  • pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
  • ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出

代码示例:

local tab= { 
[1] = "a", 
[3] = "b", 
[4] = "c" 
} 
for i,v in pairs(tab) do        -- 输出 "a" ,"b", "c"  ,
    print( tab[i] ) 
end 

for i,v in ipairs(tab) do    -- 输出 "a" ,k=2时断开 
    print( tab[i] ) 
end

2051Lua 字符串

%f 的使用

需求获取特殊边界的字符串。

举例:"123 h123 hds45678 fdaga123ad h123s"

需求:获取左边界为字母,右边界为空格的数字字符串。

1.获取所有带边界的数字串

str1 =  "123 h123 hds45678 fdaga123ad  h123s"
string.gmatch(str1,"%D%d+%D")

匹配结果:123 h123 s45678 a123a h123s

确定边界:左:%a 右:%s

string.gmatch(str1,"%f[%A]%d+%f[%s]")
匹配结果:45678

2050Lua 字符串

去除字符串首尾的空格

function trim(s)
  return (string.gsub(s, "^%s*(.-)%s*$", "%1")) 
end
string1 = "   facesho        "
string2 = trim(string1)
print(string2)

2049Lua 字符串

移除中文部分:

function StrSplit(inputstr, sep)
    if sep == nil then
      sep = "%s"
    end
    local t={}
    local i=1
    for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
       t[i] = str
       i = i + 1
    end
    return t
end
local a = "23245023496830,汉字。。。。"
local b = ":"
b = StrSplit(a,",")
print(b[1])

----輸出: 23245023496830