首页
学习
活动
专区
工具
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简单研究

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

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

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

    1.1K90

    C# 中IComparable和IComparer

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

    74720

    Sweet Snippet 系列之 有序列表

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

    30910

    C# 中IComparable和IComparer

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

    57400

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

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

    9110

    C# 中排序

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

    17720

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

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

    1.4K80

    浅谈泛型

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

    1K30

    IComparer实现文件名排序

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

    22320

    DataGridView绑定BindingList带数据排序

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

    1.6K10

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

    .Net中反射(动态创建类型实例) - Part.4 2008-2-18 作者: 张子阳 分类: .Net 框架 动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性...IComparer接口,根据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结构,并输出了颜色。 感谢阅读,希望这篇文章能给你带来帮助

    91330

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

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

    23820
    领券