pairs和ipairs异同(代码片段)

sea-stream sea-stream     2023-01-23     206

关键词:

 

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

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

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

 

例子

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

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

 

例子

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


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

 

例子

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

 

例子

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 

 

字符串分割函数

function split(str,delimiter)
    local dLen = string.len(delimiter)
    local newDeli = ‘‘
    for i=1,dLen,1 do
        newDeli = newDeli .. "["..string.sub(delimiter,i,i).."]"
    end

    local locaStart,locaEnd = string.find(str,newDeli)
    local arr = 
    local n = 1
    while locaStart ~= nil
    do
        if locaStart>0 then
            arr[n] = string.sub(str,1,locaStart-1)
            n = n + 1
        end

        str = string.sub(str,locaEnd+1,string.len(str))
        locaStart,locaEnd = string.find(str,newDeli)
    end
    if str ~= nil then
        arr[n] = str
    end
    return arr
end    
t = split("php,js", ",")
for k, v in pairs(t) do
    print(k, v)
end

输出

php
js

 

 

 

 

 

 

 

 

 

lua中,泛型for循环遍历table时,ipairs和pairs的区别(代码片段)

为了看出两者的区别,首先定义一个table: a="Hello","World";a=1,b=2,z=3,x=10,y=20;"Good","Bye"使用ipairs对其进行遍历: fori,vinipairs(a)doprint(v)end输出的结果是:HelloWorldGoodBye可见ipairs并不会输出table中存储的键值对,会跳过键值对,然... 查看详情

lua中ipairs和pairs的区别详解(代码片段)

迭代器for遍历table时,ipairs和pairs的区别:区别一:ipairs遇到nil会停止,pairs会输出nil值然后继续下去区别二:locala="Hello","World",a=1,b=2,x=10,y=20,"Good",nil,"Bye"--fori,vinipairs(a)do--print(v)--endfork,vinpairs(a)doprint(k,v)end可见:ipairs并不会输出ta... 查看详情

Lua中pairs()和ipairs()的区别是啥?

】Lua中pairs()和ipairs()的区别是啥?【英文标题】:Whatisthedifferenceofpairs()vs.ipairs()inLua?Lua中pairs()和ipairs()的区别是什么?【发布时间】:2019-08-0204:14:17【问题描述】:在for循环中,使用pairs()和ipairs()循环有什么区别?此页面同时使... 查看详情

lua中pairs和ipairs的区别

主要在有key为整数的时候有区别.注意数组默认的下标从1开始,比如a={"a","b","c","d"},和a={[1]="a",[2]="b",[3]="c",[4]="d"}是一样的.locala={"a","b","c","d"}fork,vinpairs(a)doprint(k,v)end所以ipair和pairs的结果都是1   a2   查看详情

lualua中ipair和pair的区别

pairs会遍历table的所有键值对。而ipairs就是固定地从key值1开始,下次key累加1进行遍历,如果key对应的value不存在,就停止遍历。顺便说下,记忆也很简单,带i的就是根据integerkey值从1开始遍历的。请看个例子。tb={"oh",[3]="god","my",[... 查看详情

第9月第26天pairs和ipairs

1.a={ip="127.0.0.1",port=6789}fori,vinpairs(a)doprint(i,v)end a={1}fori,vinipairs(a)doprint(i,v)endhttp://blog.csdn.net/witch_soya/article/details/7556595 查看详情

ipairs与pairs的区别

ipairs和pairs在lua中都是遍历tbale的函数可是两者有差别 1.pairs遍历table中的全部的key-vale而ipairs会依据key的数值从1開始加1递增遍历相应的table[i]值如:table1=key1="val1",key2="val2","val3"pairs会优先输出没有键的值,即先输出"val3",再... 查看详情

lua中易混淆函数

lua中易混淆的函数ipairs和pairs:ipairs只能顺序遍历table,遇到key不是数字就会退出pairs可以遍历table中所有元素---------------------------------------------------------------------pcall和xpcallpcall格式:pcall(function,...)运行函数返回true或false,不能 查看详情

lua特性

...数据类型:nil,boolean,number,string,userdata,function,table;5.pairs和ipairs区别:pairs:迭代table,遍历表中所有的KEY,可以返回nil;ipairs:迭代数 查看详情

@jsonformat注解和@datetimeformat注解异同点(代码片段)

 @JsonFormat注解和@DateTimeFormat注解异同点 基础知识:HTTP请求和响应:key-value、请求体、Content-TypeSpring注解:@RequestParam、@RequestBody和@ResponseBody @JsonFormat注解情况一:1、使用 查看详情

@jsonformat注解和@datetimeformat注解异同点(代码片段)

 @JsonFormat注解和@DateTimeFormat注解异同点 基础知识:HTTP请求和响应:key-value、请求体、Content-TypeSpring注解:@RequestParam、@RequestBody和@ResponseBody @JsonFormat注解情况一:1、使用 查看详情

javscript中的null和undefined异同(代码片段)

先看代码来了解null的undefined的差异和相同之处 //null和undefined的比较test(‘null==undefined‘,()=>expect(null==undefined).toBe(true);)test(‘null===undefined‘,()=>expect(null===undefined).toBe(false);)//null和 查看详情

kotlin与java的异同(代码片段)

本文章只为了方便查阅。文章目录Kotlin简介Kotlin与Java的异同1.函数2.变量变量类型可变变量不可变变量3.类和属性有参数的构造方法setter和getter4.枚举和"when"枚举when5."while"和"for"循环"while"循环"for"循... 查看详情

c++pair用法(代码片段)

pair实质上是一个结构体,其主要的两个成员变量是first和second,这两个变量可以直接使用。 1 pair的应用pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair。(1)STL中的map就是将key和value放在一起来保存... 查看详情

javajava异常中e的getmessage()和tostring()方法的异同(代码片段)

参考链接CSDN:Java异常中e的getMessage()和toString()方法的异同示例代码1:publicclassTestInfo????privatestaticStringstr=null;????publicstaticvoidmain(String[]args)????????System.out.println("testexception");??? 查看详情

linux:sudo和su命令异同(代码片段)

sudo通常‘Permissiondenied’错误的时候,需要执行sudo命令.该命令会提高执行权限(通常是root).当然使用sudo-uusername会指定特定用户.并不是所有的用户都可以执行sudo命令,只有在sudoersfile中存在的用户才能执行.具体请看这里:sudoersfile编... 查看详情

方法的重载和重写的异同之处(代码片段)

Java方法重载方法的重载(overload)Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载publicclassMethodDemo02publicstaticvoidmain(String[]args)//下面是针对求和方法的调用intsum1=add01(1,2);intsum2=add02(1... 查看详情

图像函数imagecreatetruecolor()和imagecreate()的异同点(代码片段)

共同点:这两个函数都是用于创建画布区别:1.不同的是创建画布和为画布填充颜色的流程不一样;用imagecreatetruecolor(intx,inty)创建的是一幅大小为x和y的图像(默认为黑色),如想改变背景颜色则需要为画布分配颜色imagecolorallcollate(resou... 查看详情