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

2023-10-26

感觉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);
        }
    }
}

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中结构体排序方法(Array.sort() + ICompare) 的相关文章

随机推荐

  • c++坑人

    大家好 我是LCR 今天为大家带来的是c 中的弹窗病毒 当然你也可以把它理解为坑人代码 如果喜欢这篇文章 可以给我点一个赞吗 代码解释 system是c语言库里面自带的一个函数 start的原本意思为 跳转 后面本应接网址 当你的后面为空时
  • 多功能翻译工具:全球翻译、润色和摘要生成

    openai translator openai translator Stars 18 1k License AGPL 3 0 这个项目是一个多功能翻译工具 由 OpenAI 提供支持 可以进行全球单词翻译 单词润色和摘要生成等操作 提供
  • python项目导出依赖包requirements.txt文件

    只导出当前项目依赖包 注意 使用 pip freeze gt requirements txt 会导出大量无用的文件 包括很多个包信息 其实这里是把你当前 python 环境的所有包的相关信息导出来了 如果我们只需导出当前项目所需的依赖包
  • 如何创建线程,多线程下又如何上锁保护公共资源?

    目录 一 创建线程几种方法 1 继承thread类 重写run方法 2 实现runnable接口 重写run方法 3 使用匿名类 或 lamda表达式 让代码更简洁 4 Callable 接口 5 使用线程池创建线程 二 多线程下 需要上锁
  • canvas画布合成

  • windows自动颁发证书

    首先去配置组策略 计算机配置 windows设置 安全设置 公钥策略 证书注册策略和证书服务客户端 不需要勾选禁用用户配置注册策略服务器 用户配置也这样配置 最后进入证书管理器 找到证书模板 右键证书管理 看见一个计算机 去右键 安全这里允
  • 虚拟内存笔记

    虚拟内存 为什么要有虚拟内存 有些进程实际需要的内存很大 超过物理内存的容量 比如一个几十G的游戏 要运行在内存为8G的计算机上 由于多道程序设计 主存是同时可以存放多个进程的逻辑及数据的 这就使得每个进程可用的物理内存更加稀缺 不可能无限
  • [1194]GitLab在web端合并分支

    文章目录 gitlab 在 web 端合并分支 1 1 发起合并操作 1 2 选择源分支和目标分支 1 3 输入合并备注 1 4 合并检查 1 5 完成合并 1 6 查看提交记录 修改的文件及内容 gitlab 在 web 端合并分支 1
  • 概率密度估计(Probability Density Estimation)--Part3:混合模型

    目录 引入 求解方法 MLE法 Clustering E M EM EM算法 大概的说明 较为详细的说明 高斯混合中的
  • 线性代数 --- Gram-Schmidt, 格拉姆-施密特正交化(上)

    Gram Schmidt正交化 在前面的几个最小二乘的文章中 实际上已经看到Gram Schmidt正交化的影子 在我个人看来 Gram Schmidt正交化更像是一种最小二乘的简化算法 下面 我会接着上一篇文章中的最后一个例子讲 慢慢引出
  • 【HDLBits 刷题 10】Circuits(6)Finite State Manchines 10-17

    目录 写在前面 Finite State Manchines Lemmings1 Lemmings2 Lemmings3 Lemmings4 Fsm onehot Fsm ps2 Fsm ps2data Fsm serial 写在前面 HD
  • LeetCode922. 按奇偶排序数组 II

    LeetCode922 按奇偶排序数组 II 给定一个非负整数数组 A A 中一半整数是奇数 一半整数是偶数 对数组进行排序 以便当 A i 为奇数时 i 也是奇数 当 A i 为偶数时 i 也是偶数 你可以返回任何满足上述条件的数组作为答
  • protobuf 中数据编码规则

    背景 protobuf 是一种跨平台的序列化结构数据的方法 可用于网络数据传输及存储 protobuf 在生成的 C 代码中为 proto 文件中的每个 message 生成了对应的 C 类 并提供了数据成员的读写方法 本文对 protob
  • 以太网知识-GMII / RGMII接口

    今天和海翎光电的小编一起分析MII RMII SMII 以及GMII RGMII SGMII接口的信号定义 及相关知识 同时小编也对RJ 45接口进行了总结 分析了在10 100模式下和1000M模式下的连接方法 GMII 接口分析 GMI
  • 避免跨域的CDN部署方案

    我们的一个项目采用动静分离的部署方式 服务接口在自己的服务器上 静态资源保存在OSS 通过CDN访问 不过这样有时会有跨域问题 本文总结解决的办法 原来的做法 原本的做法 服务接口部署在自己的服务器上 通过域名api xxx com访问 不
  • 添加序号_Excel——合并单元格添加序号

    点击上方关注我们获取更多 在工作中 为了数据便于查看 经常需要将内容相同的单元格进行合并 在进行了批量合并单元格后 如何给合并单元格添加序号成为又一难点 今天就来和大家分享一下在EXCEL中如何给合并单元格添加序号 以下表数据 城市销售数据
  • UVA-806 空间结构 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 一道遍历四叉树的题目 在遍历的同时还要记住路径 做一些额外的操作 题目本身并不难 但是格式要求较多 比如输出路径时12个就换行 不
  • 恶意代码检测理论(静态与动态分析基础)

    什么是恶意代码 恶意代码 malicious code 又称为恶意软件 malicious software Malware 是能够在计算机系统中进行非授权操作的代码 恶意代码类型 1 蠕虫或计算机病毒 可以自我复制和感染其他计算机的恶意代
  • Linux逆向 - Mirai-上

    Mirai Mirai 变种 资料 源码 Mirai源码 xd0ol1 Mirai 源码分析 https paper seebug org 142 绿盟 MIRAI源码分析报告 http blog nsfocus net mirai sou
  • C#中结构体排序方法(Array.sort() + ICompare)

    感觉C 比C 麻烦许多 资料也少 找了半天竟然没有找到一个能用的结构体排序 这是待排序的结构体 public struct la public int id public int sb 首先 C 需要调用一个空间 类似头文件 using S