排序的Key需要是连续的

  1. local x = {[1]={x=6},
  2. [2]={x=5},
  3. [3]={x=7},
  4. [5]={x=2},
  5. [6]={x=8},
  6. [7]={x=5}}
  7. ---从小到大排序
  8. table.sort(x,function(a,b)
  9. return a.x < b.x
  10. end)
  11. for i=1,10 do
  12. if x[i] ~= nil then
  13. print(x[i].x)
  14. end
  15. end

打印出:5,6,7, 2,8,5

可以看到后面的数据并没有进行排序,因为key不是连续的,中间存在断层,Lua只会对连续的部分进行排序。

非连续Key不能排序

  1. local x = { [101] = { x = 6 },
  2. [2] = { x = 5 },
  3. [10] = { x = 7 } }
  4. print("排序前:", table.tostring(x))
  5. ---从小到大排序
  6. table.sort(x, function(a, b)
  7. return a.x < b.x
  8. end)
  9. print("排序后:", table.tostring(x))

打印出:排序前和排序后数据是一样的,同样验证 Lua只会对连续的部分进行排序

  1. 排序前: {
  2. 101 = {
  3. x = 6,
  4. },
  5. 2 = {
  6. x = 5,
  7. },
  8. 10 = {
  9. x = 7,
  10. },
  11. }
  12. 排序后: {
  13. 101 = {
  14. x = 6,
  15. },
  16. 2 = {
  17. x = 5,
  18. },
  19. 10 = {
  20. x = 7,
  21. },
  22. }

解决办法

  1. local tb = { [101] = { x = 6 },
  2. [2] = { x = 5 },
  3. [10] = { x = 7 } }
  4. --保存全部的key
  5. local keys = {}
  6. for k, v in pairs(tb) do
  7. table.insert(keys, k)
  8. end
  9. --对key进行排序
  10. table.sort(keys, function(a, b)
  11. return a < b
  12. end)
  13. for i, key in ipairs(keys) do
  14. local data = tb[key]
  15. end

Lua无法排序的问题(Key需要是连续的)的更多相关文章

  1. lua table排序报错与解决

    lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...

  2. lua表排序

    对于lua的table排序问题,一般的按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之 ...

  3. lua table 排序--满足多条件排序

    前提 假设 一个小怪 有三种属性,等级(level).品质(quality).id(pid) 我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序 ...

  4. python字典的排序,按key排序和按value排序---sorted()

    >>> d{'a': 5, 'c': 3, 'b': 4} >>> d.items()[('a', 5), ('c', 3), ('b', 4)] 字典的元素是成键 ...

  5. Map排序(按key排序,按value排序)

    主要分两种,按键排序.按值排序. 而且,按key排序主要用于TreeMap,而按value排序则对于Map的子类们都适用. 一.按键排序 按Key排序主要用于TreeMap,可以实现按照Key值的大小 ...

  6. TreeMap 底层是红黑树 排序是根据key值进行的 添加元素时异常 Comparable异常 Comparator比较自定义对象放在键的位置

    package com.swift; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; ...

  7. Map按键排序(sort by key)

    1.需求:已知有如下map,要求按照key倒序排列遍历. Map<String, Integer> map = new HashMap<>(); map.put("1 ...

  8. Lua报错:invalid key to 'next'

    1.问题产生的原因是,在一个循环里对table中的元素先进行置空操作,再进行增加新元素的操作,就会报这个错误. 2.比如下面的例子:(当中间的函数足够复杂并进行封装了的情况下,不会留意到存在这个问题) ...

  9. LUA 表排序

    t = { [] = , [] = , [] = } for k, v in pairs(t) do--注意这个输出顺序是没有规律的!!! print(k, v) end local keys = { ...

随机推荐

  1. 【leet-code】542. 01 矩阵

    题目描述 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 ...

  2. Java虚拟机——类的结构与加载

    1.为什么Java可以跨平台 因为有java虚拟机,跨平台是因为字节码即class文件具有平台无关性,java代码会经过java虚拟机转换为字节码 2.class文件的结构 class文件主要是以8位 ...

  3. FormCollection collection 使用

    参考文档:https://www.cnblogs.com/dare/p/9173479.html

  4. mysql+mycat实现读写分离

    centos7       master slave mycat1.6 client 192.168.41.10 192.168.41.11 192.168.41.12 192.168.41.13 实 ...

  5. 去重分页sql语句

    ---恢复内容开始--- SELECT [TAGNAME] FROM ( SELECT tagname,ROW_NUMBER() OVER(order by tagname) AS RowNumber ...

  6. spring boot @ResponseBody转换JSON 时 Date 类型处理方法,Jackson和FastJson两种方式,springboot 2.0.9配置fastjson不生效官方解决办法

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式,springboot我用的1.x的版 ...

  7. 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)

    前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ...

  8. 【Java】Properties文件的解析

    public abstract class ReadProperties { public ReadProperties() {} /** * 回调函数,由调用者处理 * @param key * @ ...

  9. SpringBoot的打包失败

    打包是根据pom.xml文件来打的包. 如果使用Maven的默认打包,只会将src/main下的java和resources里面的内容打进Jar包中. 通过maven-assembly-plugin这 ...

  10. canvas-8searchLight3.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...