`
xylw
  • 浏览: 60243 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
文章分类
社区版块
存档分类
最新评论

C#泛型-使用委托的Sort排序方法

C# 
阅读更多
泛型的排序有3种方法,分别是:
1、List<T>.Sort(),只能在集合元素实现了IComparable泛型接口时使用
2、List<T>.Sort(Comparison<T>),Comparison<T>是一个方法委托,它带有2个参数T,返回int类型,可以灵活指定如何排序,但是需要编码时手动指定如何排序;
3、List<T>.Sort(IComparer<T>),使用实现了IComparer<T>接口的类给集合排序,可以灵活指定如何排序,但是需预先定义好类的排序方法
这里介绍第二种方法:
首先定义一个类,用作集合的元素
using System;
using System.Collections.Generic;
/// <summary>
/// 学生类
/// </summary>
public class Student 
{
    private string name;
    // 姓名
    public string Name
    {
        get { return name; }
        set { }
    }
    private int age;
    // 年龄
    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    private string grade;
    // 年级
    public string Grade
    {
        get { return grade; }
        set { grade = value; }
    }
    //构造函数 
    public Student(string name, int age, string grade)
    {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
    public override string ToString()
    {
        return this.name + "," + this.age.ToString() + "," + this.grade;
    }
}

下面就开始排序了:
using System;
using System.Collections.Generic;
public class test
{
    public static void Main()
    {
        List<Student> arr = new List<Student>();
        arr.Add(new Student("张三", 7, "一年级"));
        arr.Add(new Student("李四", 11, "二年级"));
        arr.Add(new Student("王五", 21, "一年级"));
        arr.Add(new Student("陈六", 8, "三年级"));
        arr.Add(new Student("刘七", 15, "二年级"));
        
        // 调用Sort方法,传入一个匿名方法,实现按年级排序
        arr.Sort(delegate(Student x, Student y) { return x.Grade.CompareTo(y.Grade ); });        
        // 循环显示集合里的元素
        foreach( Student item in arr)
            Console.WriteLine(item.ToString());

        // 调用Sort方法,传入一个匿名方法,实现按姓名排序
        arr.Sort(delegate(Student x, Student y) { return x.Name.CompareTo(y.Name); });        
        // 循环显示集合里的元素
        foreach( Student item in arr)
            Console.WriteLine(item.ToString()); 
    }
}
分享到:
评论

相关推荐

    C#泛型 调研报告 C#泛型

    - **算法**:泛型方法可以用于实现通用的算法,例如排序(`Array.Sort()`)、查找(`Enumerable.Where()`)等。 - **类型转换**:泛型委托和事件可以简化类型转换,例如`ConvertAll&lt;T&gt;`方法。 4. **C#泛型的不足*...

    c#实现对泛型数组排序

    要对泛型数组进行排序,C#提供了`Array.Sort()`方法,它接受两个参数:要排序的数组和可选的比较器。如果我们对基本类型(如int或string)排序,系统会自动提供默认的比较器。但对于自定义类型,我们需要提供一个...

    C#简单实现泛型选择排序

    C#中的泛型允许我们在编写代码时定义类型参数,从而创建可重用的类型,如类、接口、委托和方法。这使得我们的代码更具通用性,无需为每种数据类型单独编写排序函数。在定义泛型方法时,我们使用尖括号`&lt;T&gt;`来声明...

    C#泛型委托的用法实例分析

    本文通过一个具体的冒泡排序实例,详细解析了C#中泛型委托的使用方法。 首先,我们要理解泛型的基本概念。泛型允许我们在不指定具体数据类型的情况下编写类、接口和方法,从而提高代码的灵活性。在C#中,我们使用尖...

    用泛型比较各种数据类型

    对于排序,C#的List类有一个Sort方法,它使用默认的IComparable接口或自定义的IComparer来对列表进行排序。例如: ```csharp List&lt;MyType&gt; myList = new List(); myList.Sort(); ``` 如果需要自定义排序规则,可以...

    C#快速排序算法

    快速排序是一种高效的排序算法,...通过阅读和理解这段代码,你可以学习到C#泛型的使用,快速排序算法的实现细节,以及如何在C#中处理不同类型的数据排序。这对于提升你的编程技能和理解数据结构与算法有着重要的作用。

    C#编程-提高篇

    - **`Sort&lt;T&gt;`** 方法是一个泛型方法,它接受一个泛型列表`IList&lt;T&gt;`以及一个比较委托`Func, T, bool&gt;`。 - **`Func, T, bool&gt;`** 是一个预定义的委托类型,表示一个方法接受两个`T`类型的参数并返回一个布尔值。在...

    C_泛型集合

    然后,可以使用`Sort()`方法对集合进行排序: ```csharp persons.Sort(); foreach (Person p in persons) { Console.WriteLine(p.Name); } ``` 这将按照年龄从小到大输出人员的姓名。 ### 泛型集合的搜索 除了...

    C#书籍资料小集合,C#排序算法,C#完全手册,微软C#语言参考

    其中,`Array.Sort()`方法是C#内置的排序功能,它基于TimSort算法,高效稳定。此外,C#还提供了LINQ(Language Integrated Query)中的`OrderBy()`和`ThenBy()`方法,使得数据排序变得更为简洁和直观。 C#完全手册...

    泛型编程技术

    在C#中,泛型的使用与Java类似,但C#还支持泛型接口和泛型委托。例如,`List&lt;T&gt;`是C#中的一个泛型类,`IEnumerable&lt;T&gt;`是泛型接口。 C++的模板机制是泛型编程的基础,它可以用于创建泛型类(模板类)和泛型函数...

    2024年 C# sort面试题目

    解释 C#中 `List&lt;T&gt;.Sort()`方法和 `Array.Sort()`方法的不同之处。 在C#中,`List&lt;T&gt;` 和 `Array` 都提供了排序方法,但它们之间存在一些差异: - **类型区别**:`List&lt;T&gt;.Sort()` 是针对泛型列表的操作,而 `...

    list泛型自定义排序示例

    为了实现自定义排序,我们可以使用`List&lt;T&gt;.Sort`方法,它接受一个`Comparison&lt;T&gt;`类型的委托。这个委托定义了两个元素之间的比较规则。在这里,我们创建了一个匿名方法作为参数,比较两个`Employee`对象时,我们...

    关于C#泛型列表List&lt;T&gt;的基本用法总结

    - 排序:`list.Sort()`默认根据对象的`IComparable&lt;T&gt;`接口进行排序,也可自定义比较器。 - 复制列表:`List&lt;T&gt; copy = new List(list)`创建一个列表副本。 泛型列表`List&lt;T&gt;`与非泛型的`ArrayList`相比,其优势...

    C#常用函数方法集

    - 泛型方法:允许在方法中使用未指定类型的参数。 以上只是C#中常用函数和方法的一部分,实际上C#的库中提供了大量功能强大的工具,如文件操作、网络通信、XML处理等。学习并掌握这些方法能够显著提高开发效率,使...

    C#课件+c# 150例子

    - 排序和搜索:使用Array.Sort()和List&lt;T&gt;.Sort()进行排序,以及查找算法的应用。 - 链表和栈:了解LinkedList和Stack数据结构的使用。 - 多线程:学习Thread类创建和管理线程,以及线程同步和互斥锁的概念。 - ...

    C#常用函数方法集合

    2. **数组操作**:`Array`类提供了`CopyTo()`用于复制数组,`Length`属性获取数组长度,`Sort()`方法对数组元素进行排序。 3. **数学运算**:`Math`类包含了一系列数学函数,如`Abs()`返回绝对值,`Sqrt()`计算...

    C#经典算法(简单的冒泡到复杂点的八皇后)

    在C#中,可以结合面向对象编程思想,创建类来表示数组或棋盘,使用方法来实现具体操作。同时,通过调试和测试,确保算法的正确性和效率。 在学习这些算法时,除了理解基本逻辑,还需要关注性能优化,例如,对于排序...

    c#.net常用函数和方法集

    `Array`类提供了一组静态方法,如`Copy()`用于复制数组,`Sort()`用于排序数组。而`List&lt;T&gt;`是常用的动态集合,可以通过`Add()`添加元素,`Remove()`移除元素,`Find()`查找满足条件的元素。 3. **文件和流操作**:...

    C#数据结构

    - C# 是一种面向对象的编程语言,支持泛型、委托、事件等高级特性。 - 在 C# 中,可以通过类、接口等方式来组织和封装数据结构。 3. **数学基础知识**: - 掌握基本的数学概念对于理解算法的时间复杂度和空间...

Global site tag (gtag.js) - Google Analytics