unity中对对象数组的属性进行排序

14 篇文章 0 订阅

通过泛型委托使得在写代码时只需要传入一个对象数组和一个lambda表达式就可以对对象数组的属性进行排序

对于这种在调用时才能确定的操作,使用委托可以减少大量代码

这种方法稍微改一改,就可以写出很多有用的方法,比如求最大值,取满足条件的对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Student[] student = new Student[]{
                new Student("a", 5),
                new Student("b", 4),
                new Student("c", 3),
                new Student("d", 2),
                new Student("e", 1)
            };
            ArrayHelper.OrderBy(student, a => a.age);
            //传递lambda表达式,a就是个名字,随便什么都可以
            foreach (var item in student)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }
    }
    public class Student
    {
        public string name;
        public int age;
        public Student(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
    }

/// <summary>
/// 升序排序委托
/// </summary>
/// <typeparam name="T">对象</typeparam>
/// <typeparam name="TKey">对象的属性</typeparam>
/// <param name="t">传递的对象</param>
/// <returns></returns>
    public delegate TKey SortHandler<T, TKey>(T t);

    public class ArrayHelper
    {
        /// <summary>
        /// 根据对象的属性从小到大进行排序
        /// 使用方法ArrayHelper.OrderBy(object[],object=>object.property)
        /// </summary>
        /// <param name="array">对象数组</param>
        /// <param name="sortHandler">存放了方法的委托</param>
        static public void OrderBy<T,TKey>( T [] array, SortHandler<T, TKey> sortHandler) where TKey : IComparable<TKey>//使用此方法时,比较的属性需要实现了Icomparable接口
        {
            //这里使用的是冒泡排序,还可以使用其他的排序方式
            for (int i = 0; i < array.Length; i++)
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (sortHandler(array[i]).CompareTo(sortHandler(array[j])) > 0)
                    {
                        var temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
        }
    }

}

写完后发现Linq已经封装好了,直接用就行了。。。

直接list.OrderBy,array.OrderBy,就行了,并且还有很多其他好用的方法

网上说Linq效率不好,不过好像是说数据库方面

在数组和List方面应该没什么问题,怎么也要比我自己写的好吧

虽然白写了,但弄明白了泛型委托的用法,以后也有机会用到吧

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值