List.sort非数值类型排序

很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序。

其实理解了并不难

sort有三种结果 1,-1,0分别是大,小,相等

升序降序比较



默认List的排序是升序排序

如果要降序排序,也很简单,只需要在前面加一个负号

List<int> tmp = new List<int>(){5,1,22,11,4};
tmp.Sort((x, y) => -x.CompareTo(y));
Console.WriteLine(tmp);
//22,11,5,4,1

对于非数值类型比较用.CompareTo(...),基于IComparable接口。基本上C#的值类型都有实现这个接口,包括string。

而数值类型也可以自己比较。排序时左右两个变量必须是左-比较-右,切记不可反过来比较。

sort方法官方推荐的命名方式是x(左),y(右)。对于复杂的比较可以分出来,单独写成函数

多权重比较



假设需要tuple里item2的值优先于item1。这个时候只要给比较结果*2即可。

List<Tuple<int, int>> tmp = new List<Tuple<int, int>>()
{
    new Tuple<int,int>(2,1),
    new Tuple<int,int>(53,1),
    new Tuple<int,int>(12,1),
    new Tuple<int,int>(22,3),
    new Tuple<int,int>(1,2),
};
tmp.Sort((x, y) => -(x.Item1.CompareTo(y.Item1) + x.Item2.CompareTo(y.Item2) * 2));
Console.WriteLine(tmp);
//22,3
//1,2
//53,1
//12,1
//2,1
时间: 2024-10-16 04:49:58

List.sort非数值类型排序的相关文章

MySQL数值类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准SQL数值数据类型. 这些类型包括严格数值数据类型(INTEGER.SMALLINT.DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT.REAL和DOUBLE PRECISION). 关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词. BIT数据类型保存位字段值,并且支持MyIS

Lucene 学习之二:数值类型的索引和范围查询分析

Lucene   使用的是字符(词)类型的索引结构.对数值类型的索引和存储最终都要先转成字符类型. 早期版本Lucene 没有封装数值类型的公共类.需要先直接将数字转成字符串再加到Field 中. JAVA代码: 1 Document doc = new Document(); 2 long i = 123456L; 3 doc.Add(new Field("id", String.valueOf(i), Field.Store.YES, Field.Index.YES)); 4 wr

python sort、sorted高级排序技巧

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorted()方法.它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序. 复制代码 代码如下: >>> sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5] 你也可以使用list.sort()方法来排序,此时list本身将被修改.通常此方法不如s

C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)

一.数值类型及其调用原理 名称 说明 所占字节 范围 byte 字节型 1 -27~27-1 short 短整型 2 -215~215-1 int 整型 4 -231~231-1 long 长整型 8 -263~263-1 char 字符型 1 0~65535 float 单精度型 4 ±1.5*10-45~±3.4*1038 double 双精度型 8 ±5.0*10-324~±1.7*10308 bool 布尔型 1 只有true和false两个值 static void Main(stri

非数值(Not a Number)NaN的解释

它是一个特殊的数值.它用于表示一个本来要返回数值的操作数未返回数值的情况. 在ECMAScript中,任何数值除以0会返回NaN,而不会导致错误,不会停止代码的执行,因此不会影响其他代码的执行. NaN本身两个不同寻常的特点: 1.任何涉及NaN的操作都会返回NaN,这个特点在多步计算中有可能导致问题. 2.NaN与任何值都不相等,包括NaN本身,即:alert(NaN == NaN);  //false isNaN()函数,它可以接受一个任何类型的参数,例如: alert(isNaN(NaN)

mysql numberic types ---- mysql 数值类型-简介

编程语言中大多都有数据类型一说.虽然mysql 的sql 语句与标准sql 有别.但是宏观上看还是差不多的:下面我们说一下mysql数据库中的数值类型 一.在mysql在有那些类型可以表示数值: 1.bit[(M)] 如果没有指定M的话.这种情况下M默认是1.也就是说也就是说它只能保存一个位.一个要么是零,要么是一:M可以在[1,64]当中取 mysql> create table t(x bit); Query OK, 0 rows affected (0.00 sec) mysql> in

需求:将字符串中的数值进行排序

import java.util.Iterator; import java.util.TreeSet; /* 需求:将字符串中的数值进行排序. 例如String str="8 10 15 5 2 7"; ----> "2 5 7 8 10 15" */ public class Demo8 { public static void main(String[] args) { String str="8 10 15 5 2 7"; Stri

【SQLServer笔记】SQLServer数值类型的NULL性

与C#.java等编程语言不同,在SQLServer中,int等数值类型的初始值为NULL,并且可以直接使用赋值运算符赋值为NULL,同时值为NULL的变量无法在消息栏中显示其值,只能在结果栏中显示NULL. 同时由创建数据库时的选项,当字符数据以“+”连接值为NULL的变量时,会导致连接后的结果为NULL. 1 DECLARE @ID INT; 2 SET @ID=NULL; 3 --以“+”链接NULL值与非NULL值后输出 4 PRINT '第一次输出@ID开始' 5 PRINT '当前@

【python】 sort、sorted高级排序技巧

这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下 Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorted()方法.它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序. >>> sorted([5, 2, 3, 1, 4]) [1, 2, 3