[Lua]table(二):删除与排序
function PrintTable(tb)
for k,v in pairs(tb) do
print(v)
end
print("-------------------")
end function PrintTable2(tb)
for i,v in ipairs(tb) do
print(v)
end
print("-------------------")
end --------------------------------------------------------------A:删除
--1.删除数组(从后往前删除)
local a = {,,,,,}
local a2 = {,,,,,} --方法1(牺牲时间):
--在数组数量大且满足条件的元素多时不宜使用,因为会移动大量元素
for i=#a,,- do
if (a[i] % == ) then
table.remove(a, i)
end
end
PrintTable(a)--1,3,5 --方法2(牺牲空间):
local a3 = {}
for i=,#a2 do
if (a2[i] % ~= ) then
table.insert(a3, a2[i])
end
end
PrintTable(a3)--1,3,5 --2.删除字典(置空)
local b = {["a"]=,,,[]="b",,,} for k,v in pairs(b) do
if ((k == "a") or (type(v) == "number" and v % == )) then
b[k] = nil
end
end
PrintTable(b)--3,5,b --------------------------------------------------------------B:排序
--因为是排序,所以table必定是数组形式
--table.sort(table, function),原理是冒泡算法,相邻元素两两比较
--function返回true则表示排在前面 local c = {,,,,}
table.sort(c)--从小到大排序
PrintTable2(c)--1,2,3,4,5
table.sort(c, function(a,b) return a > b end)--从大到小排序
PrintTable2(c)--5,4,3,2,1 local c2 = {
{id=, name="e"},
{id=, name="c"},
{id=, name="a"},
{id=, name="b"},
{id=, name="d"},
}
table.sort(c2, function(a,b) return a.id < b.id end)
for i,v in ipairs(c2) do
print(v.name)
end
print("-------------------")--输出:b,c,d,a,e --多字段排序(先处理优先级低的)
--优先级:1.等级由高到低 2.id由高到低
local c3 = {
{id=, level=},
{id=, level=},
{id=, level=},
{id=, level=},
}
table.sort(c3, function(a,b)
if (a.level == b.level) then
return a.id > b.id
else
return a.level > b.level
end
end)
for i,v in ipairs(c3) do
print(v.id)
end
print("-------------------")--输出:4,3,1,2
[Lua]table(二):删除与排序的更多相关文章
- lua table 排序--满足多条件排序
前提 假设 一个小怪 有三种属性,等级(level).品质(quality).id(pid) 我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序 ...
- lua table排序报错与解决
lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...
- Lua table.sort排序
在用table.sort 排序的时候注意,如果使用多个条件排序,应在一个排序函数里按照条件优先级进行比较排序. 例如 local t = { {time = , i = }, {time = , i ...
- LUA table学习笔记
function printT( ... ) for i,v in ipairs(...) do print(i,v) end end t1={} t2={} t3={} table.insert(t ...
- Lua table库整理(v5.1)
这个库提供了表处理的通用函数. 所有函数都放在表 table. 无论何时,若一个操作需要取表的长度, 这张表必须是一个真序列. table.concat(list, [, sep, [, i , [, ...
- lua table表
lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...
- Lua 学习之基础篇四<Lua table(表)>
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- Lua table之弱引用
Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们.然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理.这样 ...
- lua table integer index 特性
table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...
随机推荐
- Jumpserver 介绍
安装jumperserver Sudo yum install –y git Su root Cd /usr/local Mkdir jumpserver 安装等依赖包 yum -y install ...
- 开始使用Chronograf(官方说明)
地址:https://docs.influxdata.com/chronograf/v1.6/introduction/getting-started/ 开始使用Chronograf 在本页面 入门概 ...
- 跟着未名学 - 录屏套件 Camtasia Studio
目录 Camtasia Recorder. 1 Camtasia Studio.. 2 时间线... 2 渲染... 5 Camtasia MenuMaker. 6 Camtasia Play. 6 ...
- synchronized基础
synchronized 例子 例1,没有同步的时候运行同一个对象的同一个方法的结果: public class TestSyn { public void showMsg() { try { for ...
- PHP 如何自定义函数
PHP 如何自定义函数 使用Function来自定义一个函数:格式如下:function function_name( $data ){ /** * 函数操作 */}注意:函数命名和自定义变量一样.只 ...
- C#对Mongodb数组对象操作
Mongo对数据的存储非常随意,需要修改对象中的数组对象时,就会变得比较复杂. 类中的类对象可以直接通过“.”例如:Department.User.name 类中的对象User是数组时可以用Depar ...
- vue-router总结
之前写过一篇关于vue-router的文章,主要是介绍怎么结合cli2在项目中使用vue-router,比较的简单,今天想结合cli3来总结一下vue-router的具体用法. cli3 在介绍vue ...
- springboot工程添加404页面
首先在/src/main/resources下创建文件夹/public/error 在文件夹里创建html页面,jsp页面不可以. <html> <body> <img ...
- Hive数据类型及文本文件数据编码
本文参考Apache官网,更多内容请参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types 1. 数值型 类型 ...
- 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂
Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...