码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-06-28 23:36:04      阅读:562      评论:0      收藏:0      [点我收藏+]

标签:

自定义类:

技术分享
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;

结果截图:

技术分享
          

 

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

标签:

原文地址:http://www.cnblogs.com/5696-an/p/5625142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!