• C#中Dictionary<TKey,TValue>排序方式


    自定义类:

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CSharp中Dictionary排序方式
    {
        [Serializable]
        public class CustmonizedClass
        {
            public string stuName { get; set; }
    
            public int stuAge { get; set; }
    
            public string stuSex  { get; set; }
    
            public double stuScore { get; set; }
           
        }
    }
    复制代码


    Dictionary<int,自定义类>

    按照Dictionary的Key值 升序排序(OrderBy)、降序排序(OrderByDescending):

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CSharp中Dictionary排序方式
    {
         public  class Program
        {
            static void Main(string[] args)
            {
                CustmonizedClass cn1 = new CustmonizedClass();
                cn1.stuName = "张三";
                cn1.stuAge = 18;
                cn1.stuSex = "男";
                cn1.stuScore = 89.5;
    
                CustmonizedClass cn2 = new CustmonizedClass();
                cn2.stuName = "李四";
                cn2.stuAge = 19;
                cn2.stuSex = "男";
                cn2.stuScore = 88.5;
    
    
                CustmonizedClass cn3 = new CustmonizedClass();
                cn3.stuName = "王五";
                cn3.stuAge = 17;
                cn3.stuSex = "女";
                cn3.stuScore = 89.5;
    
                Dictionary<int, CustmonizedClass> dic1 = new Dictionary<int, CustmonizedClass>();
                dic1.Add(3, cn1);
                dic1.Add(1, cn2);
                dic1.Add(2, cn3);
                //上面dic1.Add()故意不按照顺序
    
                Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderBy(p=>p.Key).ToDictionary(p => p.Key, o => o.Value);
               
    
                foreach (KeyValuePair<int, CustmonizedClass> item in dic1_SortedByKey) 
                {
                    Console.WriteLine("Key:{0} ; Value: name:{1}, age:{2}, sex:{3}, score:{4} ",
                        item.Key,item.Value.stuName,item.Value.stuAge,item.Value.stuSex,item.Value.stuScore);
                }
                Console.ReadLine();                        
            }
        }
    }
    复制代码

    Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderBy(p=>p.Key).ToDictionary(p => p.Key, o => o.Value);
    结果截图:

    降序排序:

    Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderByDescending(p => p.Key).ToDictionary(p => p.Key, o => o.Value);

    结果截图:

    按照Dictionary的Value值的某个属性 升序排序(OrderBy)、降序排序(OrderByDescending):

     View Code

    关键修改这句:

     Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderBy(o => o.Value.stuAge).ToDictionary(p=>p.Key,o=>o.Value);

    结果截图:

    混合排序:类似EXCEL中先按第一列升序、再按第3列的升序……

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CSharp中Dictionary排序方式
    {
         public  class Program
        {
            static void Main(string[] args)
            {
                CustmonizedClass cn1 = new CustmonizedClass();
                cn1.stuName = "张三";
                cn1.stuAge = 18;
                cn1.stuSex = "男";
                cn1.stuScore = 89.5;
    
                CustmonizedClass cn2 = new CustmonizedClass();
                cn2.stuName = "李四";
                cn2.stuAge = 19;
                cn2.stuSex = "男";
                cn2.stuScore = 88.5;
    
    
                CustmonizedClass cn3 = new CustmonizedClass();
                cn3.stuName = "王五";
                cn3.stuAge = 17;
                cn3.stuSex = "女";
                cn3.stuScore = 89.5;
    
                Dictionary<int, CustmonizedClass> dic1 = new Dictionary<int, CustmonizedClass>();
                dic1.Add(3, cn1);
                dic1.Add(1, cn2);
                dic1.Add(2, cn3);
                //上面dic1.Add()故意不按照顺序
                //Key升序
                //Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderBy(p=>p.Key).ToDictionary(p => p.Key, o => o.Value);
                //Key降序
                //Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderByDescending(p => p.Key).ToDictionary(p => p.Key, o => o.Value);
                //Value中stuAge属性
                //Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderBy(o => o.Value.stuAge).ToDictionary(p => p.Key, o => o.Value);
                //混合排序 等同于下列的linq语句
                //Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderBy(o => o.Value.stuScore).ThenByDescending(o=>o.Value.stuAge).ToDictionary(p=>p.Key,o=>o.Value);
    
                //linq语句
                var dic1_SortedByKey = from n in dic1
    
                             orderby n.Value.stuScore, n.Value.stuAge descending
    
                             select n;
    
                foreach (KeyValuePair<int, CustmonizedClass> item in dic1_SortedByKey) 
                {
                    Console.WriteLine("Key:{0} ; Value: name:{1}, age:{2}, sex:{3}, score:{4} ",
                        item.Key,item.Value.stuName,item.Value.stuAge,item.Value.stuSex,item.Value.stuScore);
                }
                Console.ReadLine();                        
            }
        }
    }
    复制代码

    Dictionary<int, CustmonizedClass> dic1_SortedByKey = dic1.OrderBy(o => o.Value.stuScore).ThenByDescending(o=>o.Value.stuAge).ToDictionary(p=>p.Key,o=>o.Value);

    等同于linq语句:

    var dic1_SortedByKey = from n in dic1

                             orderby n.Value.stuScore, n.Value.stuAge descending

                             select n;

    结果截图:


              

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/soundcode/p/8922845.html
Copyright © 2020-2023  润新知