C#中结构体排序方法(Array.sort() + ICompare)

感觉C#比C++麻烦许多,资料也少,找了半天竟然没有找到一个能用的结构体排序。

这是待排序的结构体:

   public struct la
        {
           public int id;
           public int sb;
        };

首先,C#需要调用一个空间(类似头文件)

using System.Collections;

其次  c#的compare函数需要一个类(类里面才是传统c++的compare函数)

       public class cmp : IComparer //注意一定要是“public”,一定要是“class”,一定要是“IComparer”,“cmp”为自己随便起的名。
        {
            public int Compare(object x, object y) //这里很坑,一定注意必须为int,“Compare”看似是命名一个函数,但只能用这一个名字,object也不能改!!
            {
                la a = (la)(x);
                la b = (la)(y);//然后直接强转(很蠢)
                if (a.id < b.id) return -1;//小于0为x小于y
                else if (a.id > b.id) return 1;//大于0为x大于y
                else return 0;//等于0为x等于y
            }
        }

最后,排序函数也要注意,compare函数是需要声明的!

    IComparer Cmp = new cmp();//不要忘记这一句
            Array.Sort(a,0,2,Cmp);

对于熟悉C++,学C#的人来说,C#的有些代码比较繁琐。(比如恶心的byte+byte=int,声明变量必须用new ,明明不需要这么麻烦的

如结构体排序,<algorithm>封装的sort对compare函数就很便捷,而C#调用的IComparer 就较为复杂

而且C#语法过于死板,但似乎功能更多。

附上完整能运行的代码:

using System;
using System.Collections;
namespace ConsoleApp1
{
    class Program
    {
       public struct la
        {
           public int id;
           public int sb;
        };
        public class cmp : IComparer //注意一定要是“public”,一定要是“class”,一定要是“IComparer”,“cmp”为自己随便起的名。
        {
            public int Compare(object x, object y) //这里很坑,一定注意必须为int,“Compare”看似是命名一个函数,但只能用这一个名字,object也不能改!!
            {
                la a = (la)(x);
                la b = (la)(y);//然后直接强转(很蠢)
                if (a.id < b.id) return -1;//小于0为x小于y
                else if (a.id > b.id) return 1;//大于0为x大于y
                else return 0;//等于0为x等于y
            }
        }
        static void Main(string[] args)
        {
            la[] a = new la[9];
            a[0].id = 2;a[0].sb = 1;
            a[1].id = 1;a[1].sb = 2;
            IComparer Cmp = new cmp();//不要忘记这一句
            Array.Sort(a,0,2,Cmp);
            for (int i = 0; i <= 1; i++)
                Console.WriteLine(a[i].sb);
        }
    }
}

关于 结构体排序 有什么疑问可以评论问。。(虽然我也很菜)

猜你喜欢

转载自blog.csdn.net/haobang866/article/details/100129243