zoukankan      html  css  js  c++  java
  • 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; }
           
        }
    }
    View Code


    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();                        
            }
        }
    }
    View Code

    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):

    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);
    
                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();                        
            }
        }
    }
    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();                        
            }
        }
    }
    View Code

    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;

    结果截图:


              

  • 相关阅读:
    JS重修札记
    backbone简单札记
    通用前端开发框架(一)
    两天低效编程总结
    使用HTTP请求 查找指定位置附近的景点(GOOGLE 地图)
    Google Map上,加上座標點(POIs)
    iphone 反向地理解析 从坐标获得用户的具体位置信息
    iphone 计算大文件md5
    c#多线程下载
    iphone http同步 异步请求
  • 原文地址:https://www.cnblogs.com/5696-an/p/5625142.html
Copyright © 2011-2022 走看看