C# 集合及集合内排序 问题 速求

2025-02-24 04:40:22
推荐回答(5个)
回答1:

  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 sorterX = new Comparison(compareSort);
  list.Sort(sorterX);
  这样就可以调用了。

回答2:

1. 先看什么类型的数据,是float 还是double,int
2.定义,比如 List list = new List
3.1 list.Sort().它有一个默认排序。查看文档说明
3.2 如果想自己排序 list.Sort(IComparision), 先定义一个继承比较接口的类,作为参数就可以了

回答3:

list list1 = new 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上看看,在网上也能搜到一大堆~

回答4:

List有sort方法的
要自己给类型T定义一个比较的规则
然后调sort方法就好了

回答5:

回答问题,为了完成任务。