C#中常用到的集合都有一个默认的sort方法,这个方法可以进行默认排序。
但是如果这些集合中的元素是自定义的类,那么这个默认的sort可能就不准确了。
文章中使用到的命名空间是system,接口是 IComparable 和 IComparer。
sort的默认无参数的比较方式,我个人认为是IComparable中的CompareTo函数。
抄写书上的两个例子来辅助记忆:
[csharp] view plaincopy
class Person : IComparable
{
public int Age { get; set; }
public string Name { get; set; }
public int CompareTo(object obj)
{
if (!obj.GetType().Equals(this.GetType()))
throw new Exception("");
else
{
Person person = obj as Person;
return this.Age - person.Age;
}
}
}
[csharp] view plaincopy
class PersonComparerName : IComparer
{
public static IComparer Default = new PersonComparerName();
public int Compare(object x, object y)
{
if (x is Person && y is Person)
return Comparer.Default.Compare((x as Person).Name, (y as Person).Name);
else
throw new Exception("");
}
}
如果在集合中添加的全是Person对象,这个集合名称为list,那么sort方法:
list.sort(),这个方法将使用Person中的CompareTo方法,通过年龄来对比
list.sort(PersonComparerName.Default),这个方法将使用Person中的Compare方法,通过名字来对比。
另外List
sort方法还可以使用第三种方式来排序,但是第三种方式的排序需要另外写一个函数方法。
[csharp] view plaincopy
public int compareSort(Point x, Point y)
{
if (x.X > y.X)
return 1;
else if (x.X < y.X)
return -1;
return 0;
}
[csharp] view plaincopy
Comparison
list.Sort(sorterX);
这样就可以调用了。
1. 先看什么类型的数据,是float 还是double,int
2.定义,比如 List
3.1 list.Sort().它有一个默认排序。查看文档说明
3.2 如果想自己排序 list.Sort(IComparision), 先定义一个继承比较接口的类,作为参数就可以了
list
for (int i = 0; i < 10; i++) //输入10~1
{
list1.Add(10 - i);
}
list1.Sort(); //排序
int min = list1.Min(); //输出最小值
for (int i = 0; i < list1.Count; i++) //显示
{
Console.Write("{0} ",list1[i]);
}
Console.WriteLine("\n最小值是:{0}",min);
多上微软的MSDN上看看,在网上也能搜到一大堆~
List有sort方法的
要自己给类型T定义一个比较的规则
然后调sort方法就好了
回答问题,为了完成任务。