c#中,这里的list.sort()排序,结果是按照年龄排的,是因为上边list.add添加的是p
c#中,这里的list.sort()排序,结果是按照年龄排的,是因为上边list.add添加的是person类吗,所以就按照默认的person类排了,他里边说的是年龄的问...
c#中,这里的list.sort()排序,结果是按照年龄排的,是因为上边list.add添加的是person类吗,所以就按照默认的person类排了,他里边说的是年龄的问题
展开
3个回答
展开全部
不太明白你想问的问题什么意思,给你看下别人总结的sort3种重载的举例,希望对你有帮助。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ListSort
{
class Program
{
static void Main(string[] args)
{
List<C> L = new List<C>();
L.Add(new C { n = 1, s = "b" });
L.Add(new C { n = 3, s = "a" });
L.Add(new C { n = 2, s = "c" });
// 方法1 使用Comparison<T>委托。下面代码使用的是lamda表达是。也可以使用匿名委托之类的,效果是一样的。
L.Sort((left, right) =>
{
if (left.n > right.n)
return 1;
else if (left.n == right.n)
return 0;
else
return -1;
});
// 方法2 使用IComparer<T>接口。
L.Sort(new CComparer());
// 方法3 除以上两种方法以外还可以使用另一种方法,在C类中实现IComparable<T>
L.Sort();
L.ForEach((c) =>
{
Console.WriteLine(c.n);
});
Console.Read();
}
}
public class C : IComparable<C>
{
public int n;
public string s;
public int CompareTo(C other)
{
if (this.n > other.n)
return 1;
else if (this.n == other.n)
return 0;
else
return -1;
}
}
public class CComparer : IComparer<C>
{
public int Compare(C left, C right)
{
if (left.n > right.n)
return 1;
else if (left.n == right.n)
return 0;
else
return -1;
}
}
}
展开全部
建议实现IComparer接口来进行对对象进行排序,
代码如下:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
public class MySort : IComparer {
int IComparer.Compare(Object x, Object y)
{
return (x as Person).Age.CompareTo((y as Person).Age); // 按年龄排序
}
}
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(new Person("Jim", 30));
list.Add(new Person("Bob", 25));
list.Sort(new MySort());
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine("{0} ({1})", (list[i] as Person).Name, (list[i] as Person).Age);
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询