www.weide1946.com相比和排序

2019-05-09 10:00 来源:未知

 图谋工作:

C# 相比较和排序(IComparable和IComparer以及它们的泛型完成),

 早为之所干活:

1.成立实体类:ClassInfo,私下认可想要对其依照班级学生数量实行排序

public class ClassInfo 
{

/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }

/// <summary>
/// 学生数量
/// </summary>
public int StudentCount { get; set; }

}

2.在调节台程序Main方法中,插入代码

List<ClassInfo> classList = new List<ClassInfo>();
classList.Add(
new ClassInfo()
{
ClassName = "小一班",
StudentCount = 40
});
classList.Add(new ClassInfo()
{
ClassName = "小二班",
StudentCount = 39
});
foreach(var o in classList){
Console.WriteLine(string.Format("{0}:{1}", o.ClassName, o.StudentCount));
}
Console.ReadKey();

运作后,开掘是比照扩充对象的逐条来体现的。

叁.尝试选拔对象私下认可的Sort进行排序

   classList.Sort();

   报错,错误音信提示:必须至少有三个指标实现IComparable。那么,如何贯彻自定义实体类的排序呢?上面开头逐项陈述。


 基本概念

    相比较:七个实体类之间按>,=,<举办相比较。

    排序:在会集类中,对集合类中的实体举办排序。排序基于的算法基于实体类提供的可比函数。

    C#对中央类型都提供了默许的可比和排序的算法,但相比复杂结构的实体类,需求用户自身实现比较和排序的办法

1.IComparer

 在ClassInfo类中,继继承口IComparer( IComparable<ClassInfo>),并促成接口中的CompareTo方法。

public int CompareTo(ClassInfo o)
{
return StudentCount.CompareTo(o.StudentCount);
}

运维,开采比照学生数量举行了升序展现。

在意上面代码中CompareTo方法,是接纳了整型的暗中同意相比较艺术。此处能够运用以下自定义代码,能够将比较器的干活原理演讲的更明了。

if (StudentCount > o.StudentCount)
    return 1;
else if (StudentCount == o.StudentCount)
    return 0;
else
    return -1;

二.IComparer:使用IComparer来达成二个自定义的相比较器

public class SortByName : IComparer<ClassInfo>
{

public int Compare(ClassInfo x, ClassInfo y)
{
return x.ClassName.CompareTo(y.ClassName);
}

}

将Main()中,classList.Sort()改为 classList.Sort(new SortByName());

运作后,开掘集合中的数据按名称举行了排序。

叁.用到lamda表达式实现比较排序:

 classList.Sort((ClassInfo obj1, ClassInfo obj2) => { return obj1.ClassName.CompareTo(obj2.ClassName); });

 

相比较和排序(IComparable和IComparer以及它们的泛型达成), 策画干活: 一.创办实体类:ClassInfo,私下认可想要对其依据班级学生数量举行排序...

一.创制实体类:ClassInfo,暗中认可想要对其遵照班级学生数量实行排序

public class ClassInfo 
{

/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }

/// <summary>
/// 学生数量
/// </summary>
public int StudentCount { get; set; }

}

2.在调节台程序Main方法中,插入代码

List<ClassInfo> classList = new List<ClassInfo>();
classList.Add(
new ClassInfo()
{
ClassName = "小一班",
StudentCount = 40
});
classList.Add(new ClassInfo()
{
ClassName = "小二班",
StudentCount = 39
});
foreach(var o in classList){
Console.WriteLine(string.Format("{0}:{1}", o.ClassName, o.StudentCount));
}
Console.ReadKey();

运作后,发掘是依照扩充对象的次第来展示的。

三.尝试运用对象暗许的Sort进行排序

   classList.Sort();

   报错,错误音信提醒:必须至少有三个对象完结IComparable。那么,怎样得以实现自定义实体类的排序呢?下边起首逐一陈述。


 基本概念

    比较:五个实体类之间按>,=,<进行相比。

    排序:在群集类中,对群集类中的实体举行排序。排序基于的算法基于实体类提供的可比函数。

    C#对骨干类型都提供了暗中认可的可比和排序的算法,但比较复杂结构的实体类,须求用户自个儿达成比较和排序的办法

1.IComparer

 在ClassInfo类中,继承继口IComparer( IComparable<ClassInfo>),并贯彻接口中的CompareTo方法。

public int CompareTo(ClassInfo o)
{
return StudentCount.CompareTo(o.StudentCount);
}

运行,发掘比照学生数量举行了升序展现。

小心上边代码中CompareTo方法,是行使了整型的暗许相比艺术。此处能够行使以下自定义代码,能够将比较器的劳作规律解说的更驾驭。

if (StudentCount > o.StudentCount)
    return 1;
else if (StudentCount == o.StudentCount)
    return 0;
else
    return -1;

2.IComparer:使用IComparer来完结贰个自定义的相比较器

public class SortByName : IComparer<ClassInfo>
{

public int Compare(ClassInfo x, ClassInfo y)
{
return x.ClassName.CompareTo(y.ClassName);
}

}

将Main()中,classList.Sort()改为 classList.Sort(new SortByName());

www.weide1946.com,运转后,发掘聚聚集的数据按名称进行了排序。

三.应用lamda表达式完成相比较排序:

 classList.Sort((ClassInfo obj1, ClassInfo obj2) => { return obj1.ClassName.CompareTo(obj2.ClassName); });

 

版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于网络编程,转载请注明出处:www.weide1946.com相比和排序