Lua Sort 自定义排序的注意事项(转)

原帖地址:https://blog.csdn.net/noetic_wxb/article/details/80748113

要求传入两个相同的数时要返回false, 换句话说,下面的函数用<=做比较,是错误的。

local compare_func = function(v1, v2)

return v1 <= v2   -- error

end 

测试

local t = {4,3,2,1}
table.sort(t,compare_func)
for k, v in ipairs(t) do
  print(v)

end

输出:1,2,4,3

为什么了?

因为内部使用sheel sort算法,具体细节不表。 在上面的例子中,算法运行中会调用compare_func (3,3),返回true,不满足相同元素返回false的要求。算法执行错误。

比较函数写<,不要写<=

local compare_func = function(v1, v2)
if v1[1] == v2[1] then
return v1[2] >= v2[2]
else
return v1[1] > v2[1]
end
end

local t = {{1,1},{1,1},{2,2},{3,3}}
table.sort(t,compare_func)

for k, v in ipairs(t) do
print(v[1], v[2])
end

原文地址:https://www.cnblogs.com/afan/p/12251741.html

时间: 2024-08-03 15:37:34

Lua Sort 自定义排序的注意事项(转)的相关文章

Arrays.sort()自定义排序的实现

1. Arrays.sort(T[] a)是对数组元素按字典序进行升序排列 import java.util.*; public class Main { public static void main(String[] args){ Integer[] arr = {5,4,7,9,2,12,54,21,1}; //升序 Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } } output: p.p1 { margin:

c++ stl sort 自定义排序函数cmp要遵循 strict weak ordering

满足strict weak ordering的运算符能够表达其他所有的逻辑运算符(logical operator): <(a, b)  : (a < b) <=(a, b): !(b < a) ==(a, b): !(a < b) && !(b < a) !=(a, b) : (a < b) || (b < a) >(a, b)  : (b < a) >=(a, b): !(a < b) 引用自https://www

定制对ArrayList的sort方法的自定义排序

java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将ArrayList对象与实现Commparator接口的类的对象作为参数 示例: // 外部类的方式 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.uti

C++中sort排序之自定义排序cmp(入门)

咳咳,第一次写这种博客,介绍一下sort的自定义排序cmp函数: sort和cmp的实现需要的头文件有: #include<algorithm> using namespace std; sor()是C++标准库中的排序函数,使用很方便,传进去数组的起始和结束地址就行,注意是左闭右开,默认的排序是<,从小到大,不过可以自己写一个cmpare()来自定义,下面缩写cmp()函数.cmp()函数的返回值要是bool,核心之处也是比较,因为sort默认是从小到大,所以在cmp如果还是要从小到大

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte

easyui datagrid sort 表头 排序

datagrid的点击列表头刷新,分为两种,一种是页面刷新,不涉及后台服务器数据,不会从新查询数据库,只会刷新当前页数据: 一种是服务器级刷新,会重新加载全部数据. 如果不需要自定义排序,可以直接使用 remoteSort:false,      sortName:'',      sortOrder:'asc', 一些特殊排序,或者特殊字段可以使用以下的方法 1.将服务器对数据项排序设置为false(必须) 2.设置field的排序属性为true,sorter的function内容自己写,如果

Java集合框架实现自定义排序

Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优化. 一 .使用Arrays对数组进行排序 Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法. 1.使用Arrays排序:Arrays使用非常简单,直接调用sort()即可 int[] arr = new int[] {5,8,-2,0,10}; Array

php多维数组自定义排序 uasort()

php内置的排序函数很多:正反各种排: 常用的排序函数: sort() - 以升序对数组排序rsort() - 以降序对数组排序asort() - 根据值,以升序对关联数组进行排序ksort() - 根据键,以升序对关联数组进行排序arsort() - 根据值,以降序对关联数组进行排序krsort() - 根据键,以降序对关联数组进行排序 基本都能满足需求了:关于这些函数的使用方法就不多啰嗦了: 但是在项目的实际开发中还是会有些更加苛刻的排序需求:今天要介绍的排序函数是: uasort() ua

Hadoop之--&gt;自定义排序

data: 3 33 23 12 22 11 1 --------------------- 需求: 1 12 12 23 13 23 3 package sort; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path