c#中,这里的list.sort()排序,结果是按照年龄排的,是因为上边list.add添加的是p

c#中,这里的list.sort()排序,结果是按照年龄排的,是因为上边list.add添加的是person类吗,所以就按照默认的person类排了,他里边说的是年龄的问题

不太明白你想问的问题什么意思,给你看下别人总结的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;
        }
    }
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-02-27

建议实现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);
            }
        }
    }

本回答被网友采纳
第2个回答  2015-02-27
网络

C# List Sort 排序用法总结
在C#语言中,使用List进行排序时,可以轻松实现升序、降序排序。默认情况下,Sort方法中的比较函数CompareTo会以升序方式进行排序,其结果为1表示大,-1表示小,0表示相等。例如,如果想要按照升序排列,可以使用 x > y return 1;如果需要降序排列,只需将返回结果改为 return -1。对于非数值类型、stri...

请教关于C#里面List.Sort的写法。
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...

c#中List泛型先执行Sort后再Find的结果仍然是排序后的结果吗
是啊,sort会修改底层数组的顺序 回答补充:LZ没理解我的意思,Sort会修改List<T>底层的数组,也就是说调用Sort以后,实际上底层的数组的元素已经变动过,而FindAll方法仅仅是从List<T>底层的数组中依次枚举,此时是排序过的,然后传入谓词中判断,如果true就添加到一个新的List<T>里面 回答补充2:是...

C#中numbers.Sort();是什么意思
template<class RanIt> void sort(RanIt first, RanIt last); \/\/--> 1)template<class RanIt, class Pred> void sort(RanIt first, RanIt last, Pred pr); \/\/--> 2)头文件:include <algorithm> using namespace std;1.默认的sort函数是按升序排。对应于1)sort(a,a+n); \/\/两个参数...

C#如何实现在ArrayLis中Sort()方法,使其按自定义类中的某个元素进行排序...
{ class Program { static void Main(string[] args){ System.Collections.ArrayList list = new System.Collections.ArrayList();list.Add(new A(0, "张三"));list.Add(new A(2, "王五"));list.Add(new A(1, "李四"));\/\/加入的顺序是 0,2,1 list.Sort();foreach (A a in list...

【C#】浅析C# List实现原理
Clear操作Clear并不会删除数组,仅清零元素并设_size为0,表示容量为0,避免内存浪费。foreach与Sortforeach在Unity中可能增加额外GC,但已在新版本中解决。List的Sort使用快速排序,时间复杂度为O(nlogn)。总结与参考深入理解List的实现原理,对提高C#编程效率至关重要。参考《Unity3D高级编程之进阶主程》...

C#中System.Collection.Generic. List的部分实现说明
ADD操作在循环添加时,可能频繁触发数组扩容。增加、删除和重新排序操作会导致版本号增加,以确保判断列表是否被修改。Contains操作通过遍历数组比较查找对象,而经过排序的List,可利用二分查找效率更高,未排序则会返回错误结果。ForEach方法实际上使用数组便利,并通过版本变化确保操作安全。注意,此方法使用...

java list排序出错
并没有出错.你使用了Collections.sort对List进行了自然排序,也就是升序排序.由于比较的对象是String,所以应该按字符的Unicode值进行排序.比如说"abd","ace","bdr"要进行sort排序的话,比较字符的Unicode值. 应该是这样的"abd","ace","bdr". (和原顺序一样)因为a在字典查询顺序中排在最前面,其次是...

在C#中,下列代码的运行结果是
ArrayList是动态数组,用Add()方法给动态数组添加元素后如果超过数组容量会自动增加。需要注意的一点是,超过数组容量后,容量是按2的倍数增加的,比如你的程序,最后arrNumber.Capacity是8。而arrNumber.Count是5 === 简单地说,count表示数组的实际长度,而capacity表示的是数组的容量。count不用说了...

C#中按姓名排序
不用这么复杂,用代码:names.Sort((a, b) => a.name.CompareTo(b.name));

相似回答