首页 > 编程语言 >C# 的小技巧

C# 的小技巧

时间:2023-09-20 16:50:00浏览次数:26  
标签:Info 10 00 技巧 C# 14 new 85

Linq 中, GroupBy 之后 OrderBy

GroupBy().OrderBy() 是对 Key 进行的排序,所以想要对每组内的 Value 进行排序,需要 Foreach 之内对每个 Group 进行 OrderBy。

代码示例 ```csharp using System; using System.Collections.Generic; using System.Linq;

namespace ConsoleApplication1
{
internal class Program
{
static DateTime ParseDate(string date)
{
DateTime.TryParse(date, out var d);
return d;
}

    public static void Main(string[] args)
    {
        var students = new List<Student>
        {
            new Student { Info = new Info(){Name = "Alice", Score = 90, Date = ParseDate("9/14/2023  10:10:00 AM")}},
            new Student { Info = new Info(){Name = "Bob", Score = 85 , Date = ParseDate("9/14/2023  10:20:00 AM")}},
            new Student { Info = new Info(){Name = "Charlie", Score = 95 , Date = ParseDate("9/14/2023  10:12:00 AM")}},
            new Student { Info = new Info(){Name = "David", Score = 85 , Date = ParseDate("9/14/2023  10:13:00 AM")}},
            new Student { Info = new Info(){Name = "Kiz", Score = 85 , Date = ParseDate("9/14/2023  10:30:00 AM")}},
            new Student { Info = new Info(){Name = "Eve", Score = 92 , Date = ParseDate("9/14/2023  10:16:00 AM")}}
        };

        // 使用 GroupBy() 方法按分数分组
        var groupedStudents = students.GroupBy(student => student.Info.Score);

        // 对每个分组内的学生按分数降序排序,<b>这个结果只是在分组的排序,不是每个组内的排序</b>
        var sortedGroups = groupedStudents.OrderByDescending(group => group.Key);

        // 输出结果
        Console.WriteLine($"不对结果进行时间排序:");
        foreach (var group in sortedGroups.Where(t=>t.Key.Equals(85)))
        {
            Console.WriteLine($"分数: {group.Key}");
            foreach (var student in group)
            {
                var info = student.Info;
                Console.WriteLine($"  学生姓名: {info.Name}, {info.Score}, {info.Date}");
            }
        }
        // output:
        // 不对结果进行时间排序:
        // 分数: 85
        // 学生姓名: Bob, 85, 9/14/2023 10:20:00 AM  
        // 学生姓名: David, 85, 9/14/2023 10:13:00 AM
        // 学生姓名: Kiz, 85, 9/14/2023 10:30:00 AM  

        
        Console.WriteLine($"{Environment.NewLine}对结果进行时间排序:");
        foreach (var group in sortedGroups.Where(t=>t.Key.Equals(85)))
        {
            Console.WriteLine($"分数: {group.Key}");
            foreach (var student in group.OrderByDescending(t => t.Info.Date))
            {
                var info = student.Info;
                Console.WriteLine($"  学生姓名: {info.Name}, {info.Score}, {info.Date}");
            }
        }
        // output:
        // 对结果进行时间排序:
        // 分数: 85
        // 学生姓名: Kiz, 85, 9/14/2023 10:30:00 AM  
        // 学生姓名: Bob, 85, 9/14/2023 10:20:00 AM  
        // 学生姓名: David, 85, 9/14/2023 10:13:00 AM

    }
}

public class Student
{
    public Info Info { get; set; }
}

public class Info
{
    public string Name { get; set; }
    public int Score { get; set; }
    public DateTime Date { get; set; }
}

}

</details>

标签:Info,10,00,技巧,C#,14,new,85
From: https://www.cnblogs.com/fires/p/17717701.html

相关文章

  • Vue-cli创建项目
    1.单页面应用:spa-以后Vue的项目就只有一个:XX.html页面-当定义了很多组件,不可能都写在:XX.html中吧2.单文件组件:xx.vue-https://v2.cn.vuejs.org/v2/guide/single-file-components.html-一个组件一个文件一个组件中有的东西-1.html内容:以后html都放在te......
  • HC32F4A0 lwip_mdns使用
    前言LWIP的移植可以参考上篇文章《HC32F4A0lwip移植-USTHzhanglu-博客园(cnblogs.com)》MDNS官方使用文档lwIP:MDNS(nongnu.org)参数MCU型号HC32F4A0PIHB库版本HC32F4A0_DDL_Rev2.0.0LWIP版本lwip-STABLE-2_2_0_RC1PHY型号YT8512MDK版本5.37......
  • Vue的DatePicker日期选择器
    picker-option属性官网描述是这样的 1.disabledDate一般我们使用picker-option都是通过disabledDate参数,来设置其日期选择区间,代码如下:<el-col:span="12"><el-form-itemlabel="开票日期起"prop="rqq"><el-date-pickert......
  • 通俗易懂拟人的解释 三次握手四次挥手 把 syn ack fin包也拟人化
    当你和一个朋友想要开始交谈时,你们之间需要进行一些特定的动作,就像打招呼一样。这个过程被称为"三次握手"。三次握手的过程可以类比为以下场景:你:嗨!我想和你聊天。朋友:嗯,我也想和你聊天。你:好的,那我们开始吧!在这个过程中,你首先向朋友打招呼并表示你想要聊天,朋友回应并表示他......
  • 具有高速开关、RGW80TS65EHRC11、RGW80TS65HRC11、RGW60TS65CHRC11 650V场终止沟槽型I
    1、应用太阳能逆变器UPS焊接IH功率因数校正2、规格1、RGW80TS65EHRC11IGBT沟槽型场截止650V通孔TO-247NIGBT类型:沟槽型场截止电压-集射极击穿(最大值):650V电流-集电极(Ic)(最大值):80A电流-集电极脉冲(Icm):160A不同 Vge、Ic时 Vce(on)(最大值):1.9V@15V,40A功率......
  • ocx注册失败的解决方式
    regsvr32注册ocx文件失败,提示如下: 解决方式:regedit打开注册表,找到如下Classes,右键Classes,选择权限,增加Everyone用户,权限完全控制,保存,再regsvr32注册即可。  ......
  • EMC设计经验谈
    http://csdzxx.smehn.cn/News/Detail?id=191008 9.元器件布局与布线中的电磁兼容设计:对于开关电源设备内部元器件的布局必须整体考虑电磁兼容性的要求,设备内部的干扰源会通过辐射和串扰等途径影响其它元件或部件的工作,研究表明,在离干扰源一定距离时,干扰源的能量将大大衰减,因......
  • C++ STL 容器之map
    一、map简介可以将任何基本类型映射到任何基本类型。如intarray[100]事实上就是定义了一个int型到int型的映射。map提供一对一的数据处理,key-value键值对,其类型可以自己定义,第一个称为关键字,第二个为关键字的值map内部是自动排序的二、用法1.map定义:map<type1name,t......
  • Chrome 指定版本
    查找版本https://raw.githubusercontent.com/Bugazelle/chromium-all-old-stable-versions/master/chromium.stable.json找到之后可以根据链接直接下载(有梯子)......
  • CodeArts Check代码检查服务用户声音反馈集锦(5)
    作者:gentle_zhou原文链接:<https://bbs.huaweicloud.com/blogs/401608>CodeArtsCheck(原CodeCheck),是自主研发的代码检查服务。建立在华为30年自动化源代码静态检查技术积累与企业级应用经验的沉淀之上,为用户提供代码风格、通用质量与网络安全风险等丰富的检查能力,提供全面质量报告......