赞
踩
Unity的List.Sort有三种结果 1,-1,0分别是大,小,相等。默认List的排序是升序排序,如果要降序排序,也很简单,只需要在前面加一个负号即可。
- List<int> m_temp = new List<int>(){6,1,3,5,4};
- // 升序
- m_temp.Sort((x, y) => x.CompareTo(y));
- // 降序
- m_temp.Sort((x, y) => -x.CompareTo(y));
- Console.WriteLine(m_temp);
- // 6,5,4,3,1
对于非数值类型比较用.CompareTo(...),基于IComparable接口。基本上C#的值类型都有实现这个接口,包括string。而数值型也可以自己比较。排序时左右两个变量必须是左-比较-右,切记不可反过来比较。sort方法官方推荐的 命名方式是x(左),y(右) 。对于复杂的比较 可以分出来,单独写成函数。多权重比较,假设需要tuple里item2的值优先于item1。这个时候只要给比较结果*2即可。
- List<Tuple<int, int>> m_temp = new List<Tuple<int, int>>()
- {
- new Tuple<int,int>(2,1),
- new Tuple<int,int>(43,1),
- new Tuple<int,int>(12,1),
- new Tuple<int,int>(33,5),
- new Tuple<int,int>(1,4),
- };
- m_temp.Sort((x, y) => -(x.Item1.CompareTo(y.Item1) + x.Item2.CompareTo(y.Item2) * 2));
- Console.WriteLine(m_temp);
- //33,5
- //1,4
- //43,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 List<MyInfo> myList = new List<MyInfo>();
- 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))
- {
- // lambda表达式,等级排序
- // 升序
- myList.Sort((x, y) => { return x.level.CompareTo(y.level); });
- // 降序
- myList.Sort((x, y) => { return -x.level.CompareTo(y.level); });
- }
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。