Unity 基础 之 List Sort 升降排序,List 对多数按权重排序,List 对自定义类 排序

47 篇文章 17 订阅

Unity 基础  之  List  Sort 升降排序,List 对多数按权重排序,List 对自定义类 排序

 

目录

Unity 基础  之  List  Sort 升降排序,List 对多数按权重排序,List 对自定义类 排序

一、简单介绍

二、基本概念

三、List Sort 使用举例

1)List 基础数比较

2)List 对数权重比较

3)List 自定义类的字段比较


 

一、简单介绍

Unity中的一些基础知识点。

本片介绍 List 在作为 参数传递的时候的一些之变化情况。

 

二、基本概念

所属命名空间:System.Collections.Generic

public class List : IList, ICollection, IEnumerable, IList, ICollection, IEnumerable

List类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList 泛型接口。

List.Sort:

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

(2)升序降序比较,默认List的排序是升序排序;

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

 

三、List Sort 使用举例

1)List 基础数比较

List<int> tmp = new List<int>(){5,11,22,11,4};
//  升序
tmp.Sort((x, y) => x.CompareTo(y));  // 4,5,11,11,22

// 降序
tmp.Sort((x, y) => -x.CompareTo(y)); // 22,11,11,5,4

Console.WriteLine(tmp);

 

2)List 对数权重比较

对于非数值类型比较用.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>(5,0),
    new Tuple<int,int>(52,1),
    new Tuple<int,int>(23,1),
    new Tuple<int,int>(22,3),
    new Tuple<int,int>(100,2),
};
tmp.Sort((x, y) => -(x.Item1.CompareTo(y.Item1) + x.Item2.CompareTo(y.Item2) * 2));
Console.WriteLine(tmp);
//22,3
//100,2
//52,1
//23,1
//5,0

 

3)List 自定义类的字段比较

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ListSort : MonoBehaviour
{
    /// <summary>
    /// 自定义的类
    /// </summary>
    public class customClass {
        public string name;
        public float salary;
        public int level;

        public customClass(string name, float salary, int level)
        {
            this.name = name;
            this.salary = salary;
            this.level = level;
        }

        public string toString() {
            return "name : "+name + " , salary : " + salary + " , level :" + level ;
        }
    }

    // Start is called before the first frame update
    void Start()
    {
        List<customClass> list = new List<customClass>();
        list.Add(new customClass("Ann", 11000.5f, 12));
        list.Add(new customClass("Ann", 1000.5f, 13));
        list.Add(new customClass("Ann", 13000.5f, 11));
        Debug.Log("未排序前:");
        foreach (customClass item in list)
        {
            
            Debug.Log(item.toString());
        }


        ascendingSortSalary(list);
        descendingSortSalary(list);
        ascendingSortLevel(list);
        descendingSortLevel(list);
    }

    /// <summary>
    /// salary 升序排列
    /// </summary>
    /// <param name="list"></param>
    void ascendingSortSalary(List<customClass> list) {
        Debug.Log("salary 升序排列:");
        list.Sort((x,y)=> { return x.salary.CompareTo(y.salary); });
        foreach (customClass item in list)
        {

            Debug.Log(item.toString());
        }
    }

    /// <summary>
    /// salary 降序排列
    /// </summary>
    /// <param name="list"></param>
    void descendingSortSalary(List<customClass> list)
    {
        Debug.Log("salary 降序排列:");
        list.Sort((x, y) => { return -x.salary.CompareTo(y.salary); });
        foreach (customClass item in list)
        {

            Debug.Log(item.toString());
        }
    }

    /// <summary>
    /// level 升序排列
    /// </summary>
    /// <param name="list"></param>
    void ascendingSortLevel(List<customClass> list)
    {
        Debug.Log("level 升序排列:");
        list.Sort((x, y) => { return x.level.CompareTo(y.level); });
        foreach (customClass item in list)
        {

            Debug.Log(item.toString());
        }
    }

    /// <summary>
    /// level 降序排列
    /// </summary>
    /// <param name="list"></param>
    void descendingSortLevel(List<customClass> list)
    {
        Debug.Log("level 降序排列:");
        list.Sort((x, y) => { return -x.level.CompareTo(y.level); });
        foreach (customClass item in list)
        {

            Debug.Log(item.toString());
        }
    }
}

 

 

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙魁XAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值