【C# 技术】 C# 常用排序方式——常规数据排序

C# 常用排序方式——常规数据排序
 前言

 在最近的项目中经常会对C#中的数据进行排序,对于基本数据类型,其排序方式比较简单,只需要调用内置算法即可实现,但对于自定义数据类型以及自定义排序规则的情况实现起来就比较麻烦,所以在本文章中将详细介绍一下在中C#中如何对数据进行排序。

 应用技术:  LINQ;   Array.Sort();

文章目录

  • 1. 使用Sort排序
  • 2. 使用LINQ语句进行排序
  • 3. 多条件排序
  • 4. 总结

1. 使用Sort排序

  对于系统内置数据,我们可以使用Sort方法直接进行排序,默认是采用正序进行排序,此处提供了三种方式:

  • 方式一:使用默认的Sort()方法直接就可以进行排序。
  • 方式二:使用Sort()方法并添加回调函数,回调函数调用数据类型CompareTo()方法。
  • 方式三:使用Sort()方法并添加回调函数,回调函数进行自定义,此处采用三目运算符写了个简单的方法。
static void test_general_sort()
{int[] data = { 89, 63, 48, 62, 75, 663, 45, 359, 42 };// 1. 方式一Array.Sort(data);// 2. 方式二Array.Sort(data, (x, y) => x.CompareTo(y));// 3. 方式三Array.Sort(data, (x, y) => x > y ? 1 : -1);print_array(data);
}

在这里插入图片描述

  如果是想进行逆序排序,最简单的方式就是将正序排列的数组进行一次反转即可,不然的话就是改变方法二以及方法三的回调函数输出,如下面代码所示。

static void test_general_sort_()
{int[] data = { 89, 63, 48, 62, 75, 663, 45, 359, 42 };// 1. 方式一Array.Sort(data);Array.Reverse(data);// 2. 方式二Array.Sort(data, (x, y) => y.CompareTo(x));// 3. 方式三Array.Sort(data, (x, y) => x > y ? -1 : 1);print_array(data);
}

在这里插入图片描述

2. 使用LINQ语句进行排序

  然后我们介绍一下使用LINQ语句进行排序,LINQ是一组用于C#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。在此处我们可以使用两种方式实现:

  • 方式一:使用原生的LINQ语句进行查询,此处主要通过自己写LINQ语句;
  • 方式二:使用封装好的方法OrderBy(),该方法使用比较简单,可以直接调用对应大方法即可。
static void test_general_linq()
{int[] data = { 89, 63, 48, 62, 75, 663, 45, 359, 42 };// 1. 方式一IEnumerable<int> query = from d in dataorderby dselect d;// 2. 方式二query = data.OrderBy(x => x);print_array(query);
}

  如果要项进行逆序排序,此处可以添加descending关键字进行设定,或者直接使用OrderByDescending() 方法。

static void test_general_linq_()
{int[] data = { 89, 63, 48, 62, 75, 663, 45, 359, 42 };// 1. 方式一IEnumerable<int> query = from d in dataorderby d descendingselect d;// 2. 方式二query = data.OrderByDescending(x => x);print_array(query);
}

3. 多条件排序

  在实际使用时,我们可能会遇到多条件排序,即第一个条件相等时时,在采用第二个条件排序,如果遇到这种情况,我们处理起来可能就比较麻烦。如下面代码所示,对于一个字符串数组,我想首先按照字符串长度进行排序,如果字符串长度相等,就按照首字母进行排序。实现方式如下所示:

static void test_general_sort_more()
{string[] words = { "the", "quick", "brown", "fox", "jumps", "and" };Array.Sort<string>(words, (x, y) =>{if (x.Length > y.Length) { return 1; }else if (x.Length == y.Length){if (x.Substring(0, 1)[0] > y.Substring(0, 1)[0]) { return 1; }else { return -1; }}else { return -1; }});print_array(words);
}

  在上面这段代码中,我们主要是使用了Lambda表达式创建了一个委托函数,在这个委托函数里,我们按照排序要求,对其进行了定义,主要是对返回值的条件进行了定义,最后排序结果输出为:

Array = {the, quick, brown, fox, jumps, and}
Array = {and, fox, the, brown, jumps, quick}

  不过该方式看起来实现是比较复杂的,对于大多是人来说,可能很难看懂,所以此处我们向大家展示一个比较简单的方式,就是使用LINQ语句进行多条件排序,如下面代码所示:

static void test_general_linq_more()
{string[] words = { "the", "quick", "brown", "fox", "jumps", "and" };// 1. 方式一IEnumerable<string> query = from word in wordsorderby word.Length, word.Substring(0, 1)select word;// 2. 方式二query = words.OrderBy(x => x.Length).ThenBy(x => x.Substring(0, 1));print_array(query);
}

  使用LINQ语句进行排序看起来就比较简单了,上面依旧是展示了两种方式,对于多条件排序,如果使用自定义LINQ语句排序就只需要在上一个条件后增加次要条件即可;如果使用封装后的LINQ语句,就可以在OrderBy()增加ThenBy()方法添加第二个条件。如果想实现反向排序,实现方式与上文相同。

4. 总结

以上就是给大家带来的常规数据排序方法一些实现方式,希望大家在日常使用中能够用到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ Qt开发:Charts折线图绑定事件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QCharts折线图的常用方法及灵活运用。 在上一…

华为OD机试 - 学生方阵 - 矩阵(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出 四、解题思路1、题目解析2、解体思路 五、Java算法源码再重新读一遍题目&#xff0c;看看能否优化一下~ 六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导…

浏览器加粗字体显示异常

浏览器加粗的字体模糊虚化 如果在css中设置了普通的字体样式 font-face&#xff0c;使用了 font-weight: bold 的字体会在浏览器页面中会显示模糊虚化的现象&#xff0c;而正常的字体没有这种情况&#xff0c;显示的情况根据不同的浏览器会有区别。 * 出现轻微模糊虚化效果&am…

设计模式--桥接模式

实验9&#xff1a;桥接模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解桥接模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用桥接模式解决实际问题。 [实验任务]&#xff1a;两个维度的桥接模式 用桥接模式…

什么是OAuth2.0

前言 OAuth&#xff08;Open Authorization&#xff09;是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三方移动应用或分享他们数…

Netty组件基础

Netty入门简介 netty是一个异步、基于事件驱动的网络应用框架&#xff0c;用于快速开发可维护、高性能的网络服务器和客户端。 Netty优势 Netty解决了TCP传输问题&#xff0c;如黏包、半包问题&#xff0c;解决了epoll空轮询导致CPU100%的问题。并且Netty对API进行增强&#xf…

taro小程序指定@代表

1.ts.config.json "paths": {"/*": ["./src/*"] } config/index.js const path require(path) alias: {: path.resolve(__dirname, .., src) },

Codeforces Round 917 (Div. 2)(A~D)

A - Least Product Solution 观察发现&#xff0c;对于 a i < 0 a_i<0 ai​<0&#xff0c;操作后 a i a_i ai​ 不会变得更小&#xff0c; a i > 0 a_i>0 ai​>0&#xff0c;操作后 a i a_i ai​ 不会变得更大。所以&#xff0c;当 ∏ i 1 n a i ≥ 0…

Python如何将图片转换成字符

PIL(Python Image Library)库是Python平台上一个功能强大的图像处理标准库&#xff0c;支持图像的存储、显示和处理&#xff0c;几乎可以处理所有图片格式&#xff0c;如图像的压缩、裁剪、叠加、添加文字等等。 安装PIL库:pip install pillow from PIL import Image ascii_cha…

【期末复习】微信小程序复习大纲( 1- 5 章)

前言&#xff1a; 这周开始进入期末复习周&#xff0c;没时间看C/C、linux等知识了&#xff0c;先把期末考试必考的知识捋一遍。 目录 第一章 微信小程序入门 一、填空题 二、判断题 三、选择题 四、简答题 第二章 微信小程序页面制作 一、填空题 二、判…

【Java中创建对象的方式有哪些?】

✅Java中创建对象的方式有哪些&#xff1f; ✅使用New关键字✅使用反射机制✅使用clone方法✅使用反序列化✅使用方法句柄✅ 使用Unsafe分配内存 ✅使用New关键字 这是我们最常见的也是最简单的创建对象的方式&#xff0c;通过这种方式我们还可以调用任意的构造函数 (无参的和有…

mybatis的二级缓存使用以及禁用

目录 mybatis 二级缓存配置有两处 全局设置 mapper 设置 测试代码 执行结果 源码执行逻辑 创建 SqlSession 二级缓存配置是否添加 解析 cache 标签 XMLMapperBuilder MapperBuilderAssistant CacheBuilder PerpetualCache SerializedCache LoggingCache 将 cach…

Grafana二进制部署并配置prometheus数据源

1、获取grafna二进制安装包 https://grafana.com/grafana/download?pggraf&plcmtdeploy-box-1 grafana官网下载地址 [rootambari-hadoop1 ~]# cd /opt/module/grafana/ [rootambari-hadoop1 grafana]# pwd /opt/module/grafana2、在安装自己的安装目录执行 wget https:…

在killercoda中的一次apiserver异常追查思路

笔者&#xff1a; 最近在准备cks考试&#xff0c; 然后又发现了killercoda这个能够提供模拟考试环境的平台。它提供了很棒的引导&#xff0c;教你一步步追查问题&#xff0c;形成一整套追查思路&#xff0c;我觉得很不错&#xff0c;特此分享。 准备工作 首先还是需要养成配置…

spark:RDD编程(Python版)

RDD运行原理 RDD设计背景 许多选代目前的MapReduce框架都是把中间结果写入到稳定存储 (比如磁盘)中带来了大量的数据复制、磁盘IO和序列化开销 RDD就是为了满足这种需求而出现的&#xff0c;它提供了一个抽象的数据架构&#xff0c;我们不必担心底层数据的分布式特性&#xf…

useRef语法讲解

useRef useRef 用法 import { useRef, useState } from react import ./App.cssfunction App() {const userRef useRef<HTMLInputElement>(null)const [val, setVal] useState()const handleClick () > {userRef.current?.focus()setVal(userRef.current?.valu…

windows中python3创建虚拟环境

当我们在创建一个python项目时&#xff0c;经常需要安装一堆库&#xff0c;然后转到另一个项目&#xff0c;却发现依赖冲突了&#xff0c;人都麻了。所以创建虚拟环境就是解决这个大麻烦的。 什么是虚拟环境&#xff1f; 虚拟环境是Python的一个工具&#xff0c;支持我们在一…

Nginx安装与文件服务器实现

1. 概述 Nginx是一个高性能的反向代理和web服务器软件&#xff0c;特点是系统资源消耗低、高性能、高并发、扩展性好。一个进程可以处理多个请求&#xff0c;并且是非阻塞式响应。 windows安装安装包下载地址&#xff1a;https://nginx.org/en/download.html下载之后解压运行n…

tensorboard可视化——No dashboards are active for the current data set.

No dashboards are active for the current data set. 出现问题的原因是事件的路径未用绝对路径&#xff0c;tensorboard --logdir./runs --port6007 改为tensorboard --logdirD:\Code\Python\Study\CL\hat-master\hat-master\run s\one --port6007就好了

acwing linux docker教程

终章 听着名字还挺伤感的哈哈哈其实是Linux的终章&#xff0c;感谢大家这段时间的阅读&#xff0c;这段使时间我为了给大家清楚的讲解一下Linux自己也是很认真的学习了一遍&#xff0c;自己提升了也不少。其实最近学校里面是讲了Linux和windows server 2019搭载DNS、web、ftp服…