泛型的排序有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());
}
}
分享到:
相关推荐
- **算法**:泛型方法可以用于实现通用的算法,例如排序(`Array.Sort()`)、查找(`Enumerable.Where()`)等。 - **类型转换**:泛型委托和事件可以简化类型转换,例如`ConvertAll<T>`方法。 4. **C#泛型的不足*...
要对泛型数组进行排序,C#提供了`Array.Sort()`方法,它接受两个参数:要排序的数组和可选的比较器。如果我们对基本类型(如int或string)排序,系统会自动提供默认的比较器。但对于自定义类型,我们需要提供一个...
C#中的泛型允许我们在编写代码时定义类型参数,从而创建可重用的类型,如类、接口、委托和方法。这使得我们的代码更具通用性,无需为每种数据类型单独编写排序函数。在定义泛型方法时,我们使用尖括号`<T>`来声明...
本文通过一个具体的冒泡排序实例,详细解析了C#中泛型委托的使用方法。 首先,我们要理解泛型的基本概念。泛型允许我们在不指定具体数据类型的情况下编写类、接口和方法,从而提高代码的灵活性。在C#中,我们使用尖...
对于排序,C#的List类有一个Sort方法,它使用默认的IComparable接口或自定义的IComparer来对列表进行排序。例如: ```csharp List<MyType> myList = new List(); myList.Sort(); ``` 如果需要自定义排序规则,可以...
快速排序是一种高效的排序算法,...通过阅读和理解这段代码,你可以学习到C#泛型的使用,快速排序算法的实现细节,以及如何在C#中处理不同类型的数据排序。这对于提升你的编程技能和理解数据结构与算法有着重要的作用。
- **`Sort<T>`** 方法是一个泛型方法,它接受一个泛型列表`IList<T>`以及一个比较委托`Func, T, bool>`。 - **`Func, T, bool>`** 是一个预定义的委托类型,表示一个方法接受两个`T`类型的参数并返回一个布尔值。在...
然后,可以使用`Sort()`方法对集合进行排序: ```csharp persons.Sort(); foreach (Person p in persons) { Console.WriteLine(p.Name); } ``` 这将按照年龄从小到大输出人员的姓名。 ### 泛型集合的搜索 除了...
其中,`Array.Sort()`方法是C#内置的排序功能,它基于TimSort算法,高效稳定。此外,C#还提供了LINQ(Language Integrated Query)中的`OrderBy()`和`ThenBy()`方法,使得数据排序变得更为简洁和直观。 C#完全手册...
在C#中,泛型的使用与Java类似,但C#还支持泛型接口和泛型委托。例如,`List<T>`是C#中的一个泛型类,`IEnumerable<T>`是泛型接口。 C++的模板机制是泛型编程的基础,它可以用于创建泛型类(模板类)和泛型函数...
解释 C#中 `List<T>.Sort()`方法和 `Array.Sort()`方法的不同之处。 在C#中,`List<T>` 和 `Array` 都提供了排序方法,但它们之间存在一些差异: - **类型区别**:`List<T>.Sort()` 是针对泛型列表的操作,而 `...
为了实现自定义排序,我们可以使用`List<T>.Sort`方法,它接受一个`Comparison<T>`类型的委托。这个委托定义了两个元素之间的比较规则。在这里,我们创建了一个匿名方法作为参数,比较两个`Employee`对象时,我们...
- 排序:`list.Sort()`默认根据对象的`IComparable<T>`接口进行排序,也可自定义比较器。 - 复制列表:`List<T> copy = new List(list)`创建一个列表副本。 泛型列表`List<T>`与非泛型的`ArrayList`相比,其优势...
- 泛型方法:允许在方法中使用未指定类型的参数。 以上只是C#中常用函数和方法的一部分,实际上C#的库中提供了大量功能强大的工具,如文件操作、网络通信、XML处理等。学习并掌握这些方法能够显著提高开发效率,使...
- 排序和搜索:使用Array.Sort()和List<T>.Sort()进行排序,以及查找算法的应用。 - 链表和栈:了解LinkedList和Stack数据结构的使用。 - 多线程:学习Thread类创建和管理线程,以及线程同步和互斥锁的概念。 - ...
2. **数组操作**:`Array`类提供了`CopyTo()`用于复制数组,`Length`属性获取数组长度,`Sort()`方法对数组元素进行排序。 3. **数学运算**:`Math`类包含了一系列数学函数,如`Abs()`返回绝对值,`Sqrt()`计算...
在C#中,可以结合面向对象编程思想,创建类来表示数组或棋盘,使用方法来实现具体操作。同时,通过调试和测试,确保算法的正确性和效率。 在学习这些算法时,除了理解基本逻辑,还需要关注性能优化,例如,对于排序...
`Array`类提供了一组静态方法,如`Copy()`用于复制数组,`Sort()`用于排序数组。而`List<T>`是常用的动态集合,可以通过`Add()`添加元素,`Remove()`移除元素,`Find()`查找满足条件的元素。 3. **文件和流操作**:...
- C# 是一种面向对象的编程语言,支持泛型、委托、事件等高级特性。 - 在 C# 中,可以通过类、接口等方式来组织和封装数据结构。 3. **数学基础知识**: - 掌握基本的数学概念对于理解算法的时间复杂度和空间...