unity3dC#的List升序降序排序

作者: 好怕怕 | 来源:发表于2017-06-12 16:43 被阅读71次

    List.Sort有三种结果 1,-1,0分别是大,小,相等
    升序降序比较,默认List的排序是升序排序
    如果要降序排序,也很简单,只需要在前面加一个负号

    List<int> tmp = new List<int>(){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<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
    

    // 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))
            {
                // 兰姆达表达式,等级排序
                // 升序
                myList.Sort((x, y) => { return x.level.CompareTo(y.level); });
                // 降序
                myList.Sort((x, y) => { return -x.level.CompareTo(y.level); });
            }
    
        }
    }
    

    相关文章

      网友评论

        本文标题:unity3dC#的List升序降序排序

        本文链接:https://www.haomeiwen.com/subject/ejglqxtx.html