KMC*_*KMC 3 .net c# sorting compareto
下面是一个l包含Productwith Name和Price属性列表的列表.该列表可以通过以下ProductNameComparer实现IComparar的类按字母顺序排序.
List<Product> l = p.GetList();
l.Sort(new ProductNameComparer());
MessageBox.Show(l[0].Name);
public class ProductNameComparer : IComparer<Product>
{
public int Compare(Product x, Product y)
{
return x.Name.CompareTo(y.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白列表是如何排序的.根据MSDN CompareTo返回的Int32类型值小于零,零或大于零.如果我有:
string c = "Apple";
string d = "Orange";
return c.CompareTo(d)
Run Code Online (Sandbox Code Playgroud)
该函数将返回" -1 ".
但是,如果我更换l.Sort(-1),而不是l.Sort(new ProductNameComparer())代码不编译
另外,为什么Compare(Product x, Product y)只需要两个产品作为参数,并设法比较和排序产品列表(> 2)?
Jon*_*eet 10
该Sort方法不只是调用Compare一次 - 只要需要比较两个项目,它就会多次调用它.它是一种通用的排序算法,能够对任何项目集合进行排序,只要它能够以一致的方式比较它们中的任何两个.
如果你试图调用代码就不会编译,l.Sort(-1)因为那只是试图传入一个整数 - 这甚至意味着什么?
您需要了解您没有给出Sort方法一个比较结果 - 您可以让它能够比较它需要的任何项目.
出于演示的目的,这里是Sort方法的一种可能实现(一种非常低效的方法,我知道):
public void Sort(System.Collections.Generic.IComparer<T> comparer)
{
for (int i = 0; i < this.Count - 1; i++)
{
for (int j = i + 1; j < this.Count; j++)
{
if (comparer.Compare(this[i], this[j]) > 0)
{
T tmp = this[i];
this[i] = this[j];
this[j] = tmp;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5685 次 |
| 最近记录: |