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

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

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

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

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 data
                             orderby d
                             select 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 data
                             orderby d descending
                             select 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 words
                                orderby 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. 总结

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

相关推荐

  1. [C语言] 排序算法

    2023-12-26 16:38:02       11 阅读
  2. 数组排序C语言)

    2023-12-26 16:38:02       31 阅读
  3. C# 数字字符串排序

    2023-12-26 16:38:02       8 阅读
  4. 排序-基数排序,计数排序

    2023-12-26 16:38:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-26 16:38:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-26 16:38:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-26 16:38:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-26 16:38:02       20 阅读

热门阅读

  1. 【Netty】案例-群聊天室实现

    2023-12-26 16:38:02       31 阅读
  2. LINUX自启动线程学习笔记

    2023-12-26 16:38:02       38 阅读
  3. postgres数据库安装

    2023-12-26 16:38:02       40 阅读
  4. 接口 VS 枚举,如何管理常量?

    2023-12-26 16:38:02       31 阅读
  5. 6-2 递归求阶乘和

    2023-12-26 16:38:02       38 阅读
  6. BindingData涉及的三个关键元素:数据源 路径 目标

    2023-12-26 16:38:02       36 阅读
  7. 解析新时代AI------在安全与发展之间寻求平衡

    2023-12-26 16:38:02       39 阅读
  8. PCBA贴片加工厂不良原因分析

    2023-12-26 16:38:02       42 阅读
  9. 面试算法71:按权重生成随机数

    2023-12-26 16:38:02       37 阅读
  10. oracle11体系结构二-存储结构

    2023-12-26 16:38:02       31 阅读