Unity的List排序

       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); });
        }

    }
}

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值