本文共 1786 字,大约阅读时间需要 5 分钟。
List.Sort有三种结果 1,-1,0分别是大,小,相等
升序降序比较,默认List的排序是升序排序 如果要降序排序,也很简单,只需要在前面加一个负号List tmp = new List (){5,1,22,11,4};// 升序tmp.Sort((x, y) => x.CompareTo(y));// 降序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> tmp = new List >(){ new Tuple (2,1), new Tuple (53,1), new Tuple (12,1), new Tuple (22,3), new Tuple (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
// List按照指定字段进行排序
using System;using UnityEngine;using System.Collections;using System.Collections.Generic;using UnityEngine.UI;public class Test : MonoBehaviour{ public class MyInfo { public MyInfo(string name, int level, int age) { this.name = name; this.level = level; this.age = age; } public string name; public int level; public int age; } public ListmyList = new List (); void Awake() { myList.Add(new MyInfo("A", 2, 9)); myList.Add(new MyInfo("C", 8, 6)); myList.Add(new MyInfo("B", 6, 7)); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { // 兰姆达表达式,等级排序 // 升序 myList.Sort((x, y) => { return x.level.CompareTo(y.level); }); // 降序 myList.Sort((x, y) => { return -x.level.CompareTo(y.level); }); } }}
转载地址:http://rytla.baihongyu.com/