Lua中ipairs和pairs的区别详解
迭代器for遍历table时,ipairs和pairs的区别:
区别一:ipairs遇到nil会停止,pairs会输出nil值然后继续下去
区别二:
local a = {"Hello", "World", a = , b = , x = , y = , "Good", nil, "Bye"}
-- for i,v in ipairs(a) do
-- print(v)
-- end
for k,v in pairs(a) do
print(k,v)
end
可见:ipairs并不会输出table中存储的键值对,会跳过键值对,然后顺序输出table中的值,遇到nil则会停止。
而pairs会输出table中的键和键值对,先顺序输出值,再乱序(键的哈希值)输出键值对。
这是因为,table在存储值的时候是按照顺序的,但是在存储键值对的时候是按照键的哈希值存储的,并不会按照键的字母顺序或是数字顺序存储。
=》对于a来说,如果执行print(a[3]),输出的结果也会是Good。也就是说table并不会给键值对一个索引值。
也就是说,ipairs知识按照索引值顺序,打印出了table中有索引的数据,没有索引值的不管。
而pairs是先按照索引值打印,打印完成后再按照键值对的键的哈希值打印它的值。
所以,怎么顺序输出一个table里面的键值对?
local tab = {
key1 = ,
key2 = ,
key3 = ,
key4 = ,
key5 = ,
key6 = ,
key7 = ,
} function getLen(tab)
local len =
for _,v in pairs(tab) do
len = len +
end
return len
end local key
for i=,getLen(tab) do
key = "key"..i
print(key, tab[key])
end
Lua中ipairs和pairs的区别详解的更多相关文章
- 基于python中staticmethod和classmethod的区别(详解)
例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object): def foo(self,x): print "executing foo ...
- DOS批处理中%cd%与%~dp0的区别详解
转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解 Windows下批处理中%cd%和%~dp0都能用来表示当前 ...
- Lua中的模块与module函数详解
很快就要开始介绍Lua里的“面向对象”了,在此之前,我们先来了解一下Lua的模块. 1.编写一个简单的模块 Lua的模块是什么东西呢?通常我们可以理解为是一个table,这个table里有一些变量.一 ...
- C#中struct和class的区别详解
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...
- Java中的==和equals的区别详解
1.基础知识 (1)String x = "hello"; (2)String x = new String ("hello"); 第1种方式的工作机制是,首先 ...
- C#中struct和class的区别详解 (转载)
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...
- C#中struct与class的区别详解
转自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx 有这么几点不同: 1.struct 是值类型,class是对象类 ...
- Lua中强大的元方法__index详解
今天要来介绍比较好玩的内容:__index元方法 我是备胎,记得回头看看 咳咳,相信每一位女生都拥有或者不知不觉中拥有了一些备胎,啊!当然,又或许是成为过别人的备胎. 没有备胎的人,就不是完整的人生. ...
- ThinkPHP3.2.3中M()和D()的区别详解
在实例化的过程中,经常使用D方法和M方法, 区别在于:M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法. 通俗一点说:1.M实例化参数是数据库的表名, ...
随机推荐
- Git认证方式https和ssh的原理及比较
常见的代码托管平台GitHub.GitLab和BitBucket等,基本都会使用Git作为版本控制工具.平台一般都提供两种认证方式https和ssh.了解该过程能够更加自由的配置和使用,本文就来简单聊 ...
- 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 E ...
- 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中
List<Person> list = new List<Person> { new Person{Name="张三",Age=20,Email=" ...
- JavaScript学习一之数据校验
JavaScript页面进行数据校验 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- vue学习之ajax 简单快速使用axios
vue2.x 推荐使用axios 1.首先使用安装 npm install axios -S 2.在哪用在哪引入 import axios from 'axios' 或则在main.js 中引入 在申 ...
- SAP MM 明明有需求,为啥MRP RUN后没有PR单据产生?
SAP MM 明明有需求,为啥MRP RUN后没有PR单据产生? 用户报了一个问题说,对于物料号42011222的采购单 4500000156建好了,为啥PR没有自动生成 . 我们检查了物料的MRP ...
- Java的SSH框架整合
写了好多篇的Android代码了,在写几篇关于Java的,博客园里肯定都是java的前辈啊,写的不好多给意见. SSH,什么是SSH呢,Struts+Spring+Hibernate,这三个就是整个的 ...
- Android为TV端助力 使用shared注意事项
不要存放大的key和value!我就不重复三遍了,会引起界面卡.频繁GC.占用内存等等,好自为之! 毫不相关的配置项就不要丢在一起了!文件越大读取越慢,不知不觉就被猪队友给坑了:蓝后,放进defalu ...
- 如何修改Recovery的字符串资源
前言:在实际的ROM修改中,Recovery的修改还是会经常遇到的,这篇文章主要讲解如何修改Recovery字符串. 首先我们先了解下大概的流程. 1.screen_ui.cpp 中的Screen ...
- Python:当你遇到了the package “public”?
前几天跑github上的一个python项目,先都是看看需要哪些模块哪些包,安装配置好环境的.可是看到 import public我眉头一皱,觉得事情并不简单! 所以准备扒一扒!当然项目需要也是真的哈 ...