首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

需要帮助了解List <T> .Sort(IComparer(T))如何知道要排序的值

了解List<T>.Sort(IComparer<T>)是.NET框架提供的一个排序方法,它能够按照提供的比较器对指定的List<T>进行排序。具体的实现流程如下:

  1. 首先,需要定义一个比较器IComparer<T>,它需要实现IComparer接口,该接口定义了一个Compare方法,用于比较两个对象的大小。
  2. 然后,在List<T>的Sort方法中,传入一个IComparer<T>对象,该对象会被用来比较List<T>中的元素,从而对元素进行排序。
  3. 在排序过程中,首先会对List<T>中的元素进行排序,排序的规则是根据传入的比较器来确定的。
  4. 在排序完成后,会返回一个按升序排列的新List<T>,原List<T>会被清空。

在知道要排序的值之后,可以结合具体的场景和需求,选择合适的比较器来实现排序。具体的实现流程如下:

  1. 定义一个比较器IComparer<T>,实现IComparer接口,并实现Compare方法,该方法用于比较两个对象的大小。
  2. 在需要排序的List<T>中,使用Sort方法传入比较器对象,该对象会被用来比较List<T>中的元素,从而对元素进行排序。
  3. 在排序过程中,首先会对List<T>中的元素进行排序,排序的规则是根据传入的比较器来确定的。
  4. 在排序完成后,会返回一个按升序排列的新List<T>,原List<T>会被清空。

对于如何知道要排序的值,可以通过对List<T>中的元素进行遍历,将需要排序的元素取出来,放入一个新的List<T>中进行排序。在排序时,可以根据元素的属性或值进行排序,如按名称、按ID、按数量等。如果需要对多个字段进行排序,可以创建一个排序比较器,按照指定的字段进行排序。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

对List.Sort的简单研究

好吧,那我在绑定的时候弄排序吧。。。先前一直用DataView的Sort,比较方便,只要指定排序的列名就ok了,谁知道。。。他绑定的是ListT>。。。。。怎么办。。。...现在没有用过,看了下Sort方法,参数是IComparerT> comparer,郁闷,先前一直没接触过,所以在家慢慢研究了一下,发觉很神奇,这里简单介绍下,希望大家也能帮我解答一下。...,而且排序的时候也不正确,看了IComparer接口对于Comparer的说明(MSDN):比较两个对象并返回一个值,指示一个对象是小于、等于还是大于另一个对象。...不太明白它是如何做到排序的,只是返回个int值就可以了。。。。...排序的时候,使用userList.Sort(new MyClassComparer().Compare);也是一样的效果,我知道ICompare使用了委托,所以在这里不需要我们来传参数了,我在Compare

654100
  • C#List的排序和简单去重总结

    List集合在开发过程中很常见,经常我们要对该集合进行一系列操作,本文介绍如何将该集合内的元素进行排序,博主制作简单WinForm应用程序进行演示。      ...首先,我们来看一下c#泛型List提供的Sort方法: 这里有泛型List类的Sort方法的三种形式,分别是 1,不带有任何参数的Sort方法----Sort(); 这种排序List中的元素必须继承IComparable...接口,并且要实现IComparable接口中的CompareTo()方法,在CompareTo()方法中要实现比较规则。...2,带有比较器参数的Sort方法 ----Sort(IComparerT>) 此种排序方法必须另外写一个额外的比较器类,该类必须实现IComparer接口,因为该接口有用于比较的重载函数Compare...-Sort(Int32, Int32 IComparer(T)) 界面: ?

    1.2K90

    C# 中的IComparable和IComparer

    ),那么这个排序当然也是取决于我们特定的值。...IComparable接口 该接口由其值可以排序或排序的类型实现,并提供强类型的比较方法以对泛型集合对象的成员进行排序,例如数字可以大于第二个数字,一个字符串可以在另一个字符串之前以字母顺序出现。...相反他由ListT>.Sort()和Add等方法自动调用。 通常,提供IcomparableT>实现的类型还IEquatableT>实现接口。...IEquatableT>接口Equals定义方法,该方法确定实现类型的实例的相等性。 CompareTo(T)方法的实现必须Int32返回具有以下三个值之一的,如下表所示。...IComparer接口提供了Compare方法,该方法比较两个对象并返回一个值,该值指示一个对象小于,等于或大于另一个对象。实现IComparer接口的类必须提供比较两个对象的Compare方法。

    76020

    Sweet Snippet 系列之 有序列表

    工作中常常遇到需要使用有序列表的情况,这篇文章简单讨论一下相关实现(以 C# 中的 ListT> 为例) 使用 ListT>.Sort 很朴素的一种想法,为了维持 List 有序,我们可以在...Add 操作之后进行 Sort 操作(Remove 操作后不需要重新 Sort): list.Add(value); list.Sort(); 该方案的缺点是时间消耗比较大,每次 Add 操作之后都要执行费时的...List 有序这个前提,每次进行 Add 时,我们可以使用插入排序来添加元素,这样我们便可以省去之后的 Sort 操作,而 List 本身提供的 BinarySearch(二分查找)功能正好可以帮助我们实现插入排序...; namespace Util { public class SortedListT> { public SortedList(IComparerT> comparer...T> m_comparer; ListT> m_elementList = new ListT>(); } } 完整的代码在这里(gist) ---- 软件开发的核心就是权衡

    31610

    C# 中的IComparable和IComparer

    ),那么这个排序当然也是取决于我们特定的值。...IComparable接口 该接口由其值可以排序或排序的类型实现,并提供强类型的比较方法以对泛型集合对象的成员进行排序,例如数字可以大于第二个数字,一个字符串可以在另一个字符串之前以字母顺序出现。...相反他由ListT>.Sort()和Add等方法自动调用。 通常,提供IcomparableT>实现的类型还IEquatableT>实现接口。...IEquatableT>接口Equals定义方法,该方法确定实现类型的实例的相等性。 CompareTo(T)方法的实现必须Int32返回具有以下三个值之一的,如下表所示。...IComparer接口提供了Compare方法,该方法比较两个对象并返回一个值,该值指示一个对象小于,等于或大于另一个对象。实现IComparer接口的类必须提供比较两个对象的Compare方法。

    58300

    C# 中的排序

    排序 排序是开发中非常常见的场景,我们在不同的C#版本该如何实现排序呢?本文通过讲解C# 1到C# 3不同的实现方案来帮助大家清晰的了解 C# 进化的过程。...,你需要们实现IComparer接口。...C# 2 IComparer和List均支持传入类型,代码更为精简了,类型也得到了约束,再也不需要手动类型转换了 using System; using System.Collections; using...类似foreach循环中隐式的类型转换也被取消了。编译器仍然会考虑将序列中的源类型转换为变量的目标类型,但它知道这时两种类型均为Product,因此没必要产生任何用于转换的代码。 确实有了一定的改进。...但是,我们希望能直接指定要进行的比较,就能开始对产品进行排序,而不需要实现一个接口来做这件事情 List products = Product.GetProducts(); products.Sort

    18720

    C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性

    在使用可选参数时, 需要注意一下几个约束条件: (1)所有可选参数必须位于必选参数之后. (2)可选参数的默认值必须为常亮. (3)参数数组(有params修饰符声明)不能做为可选参数 (4)用ref或...(); 20 21 // List类型的 liststrs变量的sort方法接收的是IComparer类型的参数 22 // 然而下面代码传入的是...IComparer这个类型的参数,要编译成功的话,必须能够转化为IComparer这个类型 23 // 正是因为IComparerT>泛型接口支持逆变...应接收IComparer类型的参数, 虽然传入的实参是IComparer类型, 但因为IComparerT>泛型接口支持逆变, 所以可将object转化为string...类型. 2.3协变和逆变的注意事项 (1)只有接口和委托才支持协变和逆变, 类或泛型方法的类型参数都不支持协变和逆变 (2)协变和逆变只适用于引用类型, 值类型不支持协变和逆变(例如List无法转化为

    1.4K80

    一个开源且全面的C#算法实战教程

    C#经典十大排序算法(完结) 支持C#的开源免费、新手友好的数据结构与算法入门教程 项目介绍 一个C#实现的各种算法集合,这些算法涵盖了计算机科学、数学和统计学、数据科学、机器学习、工程等多个领域。...项目源代码 主要算法包括 排序算法:冒泡排序、插入排序、计数排序、快速排序等 搜索算法:线性搜索、二分搜索等 数值计算:最大公约数、二项式系数、牛顿的平方根计算、欧拉方法等 字符串算法:Rabin-Karp... public void Sort(T[] array, IComparerT> comparer) { for (var i = 1; i public void Sort(T[] array, IComparerT> comparer) => Sort(array, comparer, 0, array.Length...private void Sort(T[] array, IComparerT> comparer, int left, int right) { if (left

    11310

    浅谈泛型

    泛型的目的及优点 我们在写一些通用库的时候,经常需要写一个算法,比如交换,搜索,比较,排序,转换等算法,但是需要支持int,string等多种类型。通常我们可能会把代码复制多遍分别处理不同类型的数据。...来看一个简单例子,Framework类库定义了一个泛型列表算法,它知道如何管理对象集合。泛型算法没有设定数据的类型。要在使用这个泛型列表算法时指定具体的数据类型。...public void Sort(ComparisonT> comparison); //IComparerT>泛型接口: int Compare(T x, T y); //当第一参数比第二个参数小...public void Sort(IComparerT> comparer); public T[] ToArray(); //泛型方法,方法声明里面包含了额外的类型:TOutput...很多方法接受PredicateT>类型的参数,它是一个委托,类似:FuncT,bool>。 7. Sort方法可以传入自定义的委托或接口,实现自定义排序。 8.

    1K30

    .Net中的反射(动态创建类型实例) - Part.4

    .Net中的反射(动态创建类型实例) - Part.4 2008-2-18 作者: 张子阳 分类: .Net 框架 动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性...IComparerT>接口,根据sort判断以何为依据一进排序 public int Compare(Div x, Div y) { if (sort...); } 在将列表输出到页面之前,我们调用列表的Sort方法: list.Sort(Div.GetComparer(sort)); // 对列表进行排序 foreach (Div item in...list) { pnColors.Controls.Add(item); } 好了,所有工作都完成了,再次打开页面,可以看到类似如下画面,我们可以按照名称或者颜色值来对列表进行排序显示: ?...最后,我们使用反射遍历了System.Drawing.Color结构,并输出了颜色值。 感谢阅读,希望这篇文章能给你带来帮助!

    92730

    DataGridView绑定BindingList带数据排序的类

    本文章转载:http://yuyingying1986.blog.hexun.com/30905610_d.html  DataGridView绑定ListT>类时候,不会自动的进行排序。...默认BinddingListT> 不支持排序。 解决办法:一、手动实现DataGridView列标题的点击排序事件。二、自定义实现BinddingListT>类 支持排序。...我们常常使用DataGridView 控件,这个控件在绑定数据源后,常常不能排序,正好我现在做的项目中也遇上了这个问题,所以上网查了一些资料,解决了这个问题,下面是我解决的方法 1.创健一个专门用来排序的类...处理手段   做排序处理,做本质的办法是继承ICompare接口,重新Compare方法。...T> list=new ListT>(); DataGridView.DataSource = new BindingCollection的类>(list); 4.完成  第二种写法:

    1.7K10

    IComparer实现文件名排序

    一、概要 本文主要分享在文件对象处理中需要根据文件名排序思路。主要基于.net框架内提供的IComparer对象,它主要将定义类型为比较两个对象而实现的方法。...二、详细内容 1.场景 在读取文件列表的时候,会遇到各种各样的文件名例如“xxx-01”,"1xx01-13"希望按照数字的大小进行排序;可是一旦文件名中出现了符号那么排序就不能用List集合提供Sort...方法的常规排序规则了。...这时候就会出现文件名顺序乱掉的情况。这个时候我们就需要重新定义这个排序规则了。那么刚好IComparer就可以支持我们来解决这个问题。...2.实现 IComparer的实现 public class FilesNameComparerT> : IComparerT> { public int Compare(T x, T y)

    22620

    C# 学习笔记(15)—— C# 4.0

    x 是必选参数,即调用方法必须为其指定实参;而参数 y 和参数 name 为可选参数,即可以不用为它们指定实参 在使用可选参数时,需要注意一下几个约束条件 所有可选参数必须位于必选参数之后 可选参数的默认值必须为常量...listStrings.Sort(objComparer)`也就可以编译通过了 而listObject变量的Sort方法则应接受IComparer类型参数,但代码listObject.Sort...由于IComparerT>接口泛型参数只支持逆变,不支持协变,所以不能把IComparer类型隐式地转换为IComparer,所以会出现编译错误 协变和逆变的注意事项...并不是所有类型都支持泛型类型参数的协变和逆变性,下面总结了使用这两个特性时需要注意的地方 只有借口和委托才支持协变和逆变(如Func、ActionT>),类或泛型方法的类型参数都不支持协变和逆变...协变和逆变只适用于引用类型,值类型不支持协变和逆变(因为可变性存在引用转换的过程,而值类型变量存储的就是对象本身,并不是对象的应用),所以List无法转换为IEnumerable<object

    25820
    领券