首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏HueiFeng技术专栏

    C# 中的IComparable和IComparer

    IComparer接口 IComparable 接口的CompareTo方法一次只能对一个字段进行排序,因此无法对不同的属性进行排序。 IComparer接口提供了Compare方法,该方法比较两个对象并返回一个值,该值指示一个对象小于,等于或大于另一个对象。实现IComparer接口的类必须提供比较两个对象的Compare方法。 例如,您可以创建一个StudentComparer类,该类实现IComparer,并具有一个Compare方法,该方法按Name比较Student对象。 示例 class StudentComparer : IComparer { public int Compare(object x, object y) IComparable<T>和IComparer<T> 上述示例中我们将对象进行了多次的装箱和拆箱,那么此时我们可以将方法改为泛型的,泛型的出现也让我们避免了装箱和拆箱的资源浪费.

    99220发布于 2020-02-24
  • 来自专栏HueiFeng技术专栏

    C# 中的IComparable和IComparer

    item.Name, item.Age); } } } 输出如下 [1098068-20200101153632047-2087527709.png] IComparer IComparer接口提供了Compare方法,该方法比较两个对象并返回一个值,该值指示一个对象小于,等于或大于另一个对象。实现IComparer接口的类必须提供比较两个对象的Compare方法。 例如,您可以创建一个StudentComparer类,该类实现IComparer,并具有一个Compare方法,该方法按Name比较Student对象。 示例 class StudentComparer : IComparer { public int Compare(object x, object y) <T> class StudentComparer : IComparer<Student> { public int Compare([AllowNull] Student

    81000发布于 2020-01-22
  • 来自专栏JusterZhu

    IComparer实现文件名排序

    主要基于.net框架内提供的IComparer对象,它主要将定义类型为比较两个对象而实现的方法。 那么刚好IComparer就可以支持我们来解决这个问题。 2.实现 IComparer的实现 public class FilesNameComparer<T> : IComparer<T> { public int Compare(T x, T y)

    39120编辑于 2022-12-07
  • 来自专栏Unity3d程序开发

    c# IComparer比较字符串

    例如:幻灯片50,幻灯片6,幻灯片40 排序完后:幻灯片6,幻灯片40,幻灯片50 public class PathCompare : IComparer<string> { public

    33810编辑于 2023-08-24
  • 来自专栏喵叔's 专栏

    利用 IComparable<T> 以及 IComparer<T> 定义顺序关系

    零、讲解 在 .NET 中有两个接口可以用来定义关系,即 IComparable 和 IComparer 。 一、总结 在我们自定义类型的时候,IComparable 和 IComparer 是定义排序关系的标准,大部分排序基本上都可以通过 IComparable 来实现,但是我们需要主义的时这个时候我们必须重载运算符

    78920发布于 2020-11-11
  • 来自专栏全栈程序员必看

    在ListView中实现排序

    <PostInfo> { #region IComparer<PostInfo> 成员 public int Compare(PostInfo x, PostInfo } ///

    /// 回复降序比較类 /// public class PostReplyCountDescCompare : IComparer <PostInfo> { #region IComparer<PostInfo> 成员 public int Compare(PostInfo x, PostInfo <PostInfo> { #region IComparer<PostInfo> 成员 public int Compare(PostInfo x, PostInfo <PostInfo> { #region IComparer<PostInfo> 成员 public int Compare(PostInfo x, PostInfo

    2.4K40编辑于 2022-09-06
  • 来自专栏Web开发之路

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

    <object> objComparer = new TestComparer(); IComparer<string> stringComparer = new TestComparer <string>类型的参数,虽然传入的实参为IComparer<object>类型,但因为``IComparer泛型接口支持逆变,所以可将object转为string类型,于是代码listStrings.Sort (objComparer)`也就可以编译通过了 而listObject变量的Sort方法则应接受IComparer<Object>类型参数,但代码listObject.Sort(objComparer2 )却传入了IComparer<string>类型的变量。 由于IComparer<in T>接口泛型参数只支持逆变,不支持协变,所以不能把IComparer<string>类型隐式地转换为IComparer<object>,所以会出现编译错误 协变和逆变的注意事项

    70020编辑于 2023-10-20
  • 来自专栏NetCore

    对List.Sort的简单研究

    现在没有用过,看了下Sort方法,参数是IComparer<T> comparer,郁闷,先前一直没接触过,所以在家慢慢研究了一下,发觉很神奇,这里简单介绍下,希望大家也能帮我解答一下。 this.userName = userName; this.addTime = addTime; } } 好,我现在要按照时间来倒序 因为第一次用IComparer 接口,所以做的简单点 写一个类,继承IComparer接口,实现Compare方法 public class MyClassComparer : IComparer<MyClass> { IComparer 成员 } 测试一下: class Program { static void Main(string[] args) Console.ReadLine(); } } 测试成功,不过一开始我在MyClasComparer.Comparer方法里没有设定等于,所以排序的时候会提示错误,而且排序的时候也不正确,看了IComparer

    804100发布于 2018-02-02
  • 来自专栏张志敏的技术专栏

    快速排序与三路快速排序

    StdRandom.Shuffle(a); Sort(a, 0, a.Length - 1); } public static void Sort(T[] a, IComparer lo, j - 1); Sort(a, j + 1, hi); } private static void Sort(T[] a, int lo, int hi, IComparer a[k]; } } return a[k]; } public static T Select(T[] a, int k, IComparer static void Sort(T[] a) { Sort(a, 0, a.Length - 1); } public static void Sort(T[] a, IComparer lo, lt - 1); Sort(a, gt + 1, hi); } private static void Sort(T[] a, int lo, int hi, IComparer

    72930发布于 2020-08-10
  • 来自专栏.NET企业级解决方案应用与咨询

    C#4.0新增功能03 泛型中的协变和逆变

    该示例还定义一个实现 ShapeAreaComparer (在 Visual Basic 中为 IComparer<Shape> )的IComparer(Of Shape) 类。 该示例创建 SortedSet<T> 对象的 Circle ,使用采用 IComparer<Circle> (在 Visual Basic 中为IComparer(Of Circle) )的构造函数。 但是,该对象不传递 IComparer<Circle>,而是传递一个用于实现 ShapeAreaComparer 的 IComparer<Shape>对象。 向 Circle 中添加新 SortedSet<Circle>对象时,每次将新元素与现有元素进行比较时,都会调用 IComparer<Shape>.Compare 对象的IComparer(Of Shape <shape>的shapeareComparer, // 即使sortedset<circle>的构造函数需要IComparer<circle>, // 因为IComparer

    1.9K20发布于 2019-09-17
  • 来自专栏一枝花算不算浪漫的专栏

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

    下面使用.Net类库中的接口public interface IComparer<in T>为例进行演示: 1 class Program 2 { 3 static void Main(string <object> objComparer = new TestComparer(); 19 IComparer<string> objComparer2 = new TestComparer (); 20 21 // List<string>类型的 liststrs变量的sort方法接收的是IComparer<string>类型的参数 22 // 然而下面代码传入的是 IComparer<object>这个类型的参数,要编译成功的话,必须能够转化为IComparer<string>这个类型 23 // 正是因为IComparer<in T>泛型接口支持逆变 <string>类型的参数, 虽然传入的实参是IComparer<objcet>类型, 但因为IComparer<in T>泛型接口支持逆变, 所以可将object转化为string类型. 2.3协变和逆变的注意事项

    2K80发布于 2018-05-18
  • 来自专栏分布式系统和大数据处理

    基于业务对象(列表)的排序

    public interface IComparer<T> { int Compare(T x, T y); } IComparer<T>只需要实现一个方法,Compare()它接受两个同一类型的参数 实现 IComparer<T>接口 打开Order.cs文件,对它进行如下修改,先添加一个枚举SortDirection,用于表示排序的方向: // 可复用的枚举,表示排序的方向 public enum <T>的类OrderComparer: // 嵌套类,仅对于此业务对象进行排序 public class OrderComparer : IComparer<Order> { } 现在考虑如何实现它 有了思路,我们现在实现IComparer<T>接口,编写方法 // 实现 IComparer接口 public int Compare(Order x, Order y) { int result 接着,我们详细地讨论了如何通过实现一个IComparer<T>接口,来实现可以对任意单个属性以及多个属性组合的排序。

    3.1K20发布于 2018-09-30
  • 来自专栏c#分享专栏

    c#使用自定义的比较器和循环遍历去重

    自定义比较器的基本概念在C#中,自定义比较器通常通过实现IComparer<T>或IEqualityComparer<T>接口来实现。 IComparer<T>接口IComparer<T>接口用于定义对象的比较逻辑,它包含一个Compare方法,该方法返回一个整数,表示一个对象是否小于、等于或大于另一个对象。 string name, int age) { Name = name; Age = age; }}public class PersonComparer : IComparer Console.WriteLine($"{person.Name}, {person.Age}"); } }}在这个示例中,我们定义了一个Person类,并实现了一个PersonComparer类,它实现了IComparer

    5K00编辑于 2024-10-10
  • 来自专栏DotNet NB && CloudNative

    C# 逆变的具体应用场景

    { } 逆变的应用场景 提起逆变,可能大家见过类似下面这段代码: class Program { static void Main(string[] args) { IComparer <Animal> animalComparer = new AnimalComparer(); IComparer<Dog> dogComparer = animalComparer;/ / 将 IComparer<Animal> 赋值给 IComparer<Dog> } } public class AnimalComparer : IComparer<Animal> { // 省略具体实现 } IComparer<T>`中的`T`就是标记了代表逆变的关键字`in namespace System.Collections.Generic { public interface IComparer<in T> { int Compare(T?

    61020编辑于 2022-03-22
  • 来自专栏编程进阶实战

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

    </param> public void Sort(T[] array, IComparer<T> comparer) { for (var i = 1; i < array.Length </param> public void Sort(T[] array, IComparer<T> comparer) => Sort(array, comparer, 0, array.Length - 1); protected abstract T SelectPivot(T[] array, IComparer<T> comparer, int left, int right); private void Sort(T[] array, IComparer<T> comparer, int left, int right) { if (left left, p); Sort(array, comparer, p + 1, right); } private int Partition(T[] array, IComparer

    25610编辑于 2024-06-13
  • 来自专栏跟着阿笨一起玩NET

    DataGridView绑定BindingList<T>带数据排序的类

    ConcreteMonitor.VehicleManagement { class ObjectPropertyCompare<T> : System.Collections.Generic.IComparer } } return -1; } } public class PropertyComparer<T> : IComparer <T> { private readonly IComparer comparer; private PropertyDescriptor propertyDescriptor comparerForPropertyType = typeof(Comparer<>).MakeGenericType(property.PropertyType); this.comparer = (IComparer BindingFlags.Public, null, null, null); this.SetListSortDirection(direction); } #region IComparer

    2.2K10发布于 2018-09-19
  • 来自专栏hbbliyong

    排序含有数字的字符串:一个巧妙地方法

    floors) Console.WriteLine(s); Console.ReadKey(); } } // 工厂模式 class Factory : IComparer <string> { private Factory() { } public static IComparer<string> Comparer { get {

    95640发布于 2018-03-06
  • 来自专栏程序你好

    .NET面试基础知识

    IComparer Variable declared as const vs. readOnly Default value expressions Passing parameters to methods IComparer 它们都可以用于集合中的自定义排序。主要的区别是 IComparable允许内部排序实现,而IComparer允许外部定制排序实现。 ? IComparable ? ? IComparer ? IComparer using lambda expression, ? personObjList.Sort((x, y) => x.Name.CompareTo(y.Name)); personObjList.Sort((x, y) => x.Age.CompareTo(y.Age)); IComparer on multiple properties in the class, public class PersonComparer: IComparer < Person > { public enum

    1.2K20发布于 2018-09-29
  • 来自专栏Web开发之路

    C# 中的排序

    13.99m), new Product("Sweeney Todd", 10.99m), }; } } C# 1 在C# 1中如果我们想实现排序,你需要们实现IComparer } Console.ReadKey(); } } public class ProductPriceComparer : IComparer C# 2 IComparer和List<>均支持传入类型,代码更为精简了,类型也得到了约束,再也不需要手动类型转换了 using System; using System.Collections; using Sweeney Todd", 10.99m), }; } } public class ProductPriceComparer : IComparer

    1.2K20编辑于 2023-10-20
  • 来自专栏DotNet程序园

    c# 误区系列(一)

    然后还要一个问题就是,做排序sort用IComparerIComparer之所以出现,是因为当时需要规范化,里面可以去调用对应的方法进行比较。 但是随着泛型和lambda的出现,一般都是这样写IEnumerable.sort((x,y)=>{ return x.age>y.age; }); 这样的代码更好维护,因为你不比再去关心IComparer IComparer当然具有存在的价值,比如说复杂的比较,复用性也好一点。 属性是变量? 初学的时候,可能有的有吧属性当做变量。

    53430发布于 2020-11-05
领券