C#中Dictionary排序方式

您所在的位置:网站首页 orderby降序 C#中Dictionary排序方式

C#中Dictionary排序方式

#C#中Dictionary排序方式| 来源: 网络整理| 查看: 265

自定义类:

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

按照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 dic1 = new Dictionary(); dic1.Add(3, cn1); dic1.Add(1, cn2); dic1.Add(2, cn3); //上面dic1.Add()故意不按照顺序 Dictionary dic1_SortedByKey = dic1.OrderBy(p=>p.Key).ToDictionary(p => p.Key, o => o.Value); foreach (KeyValuePair 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 dic1_SortedByKey = dic1.OrderBy(p=>p.Key).ToDictionary(p => p.Key, o => o.Value);结果截图:

降序排序:

Dictionary 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 dic1 = new Dictionary(); dic1.Add(3, cn1); dic1.Add(1, cn2); dic1.Add(2, cn3); //上面dic1.Add()故意不按照顺序 //Key升序 //Dictionary dic1_SortedByKey = dic1.OrderBy(p=>p.Key).ToDictionary(p => p.Key, o => o.Value); //Key降序 //Dictionary dic1_SortedByKey = dic1.OrderByDescending(p => p.Key).ToDictionary(p => p.Key, o => o.Value); //Value中stuAge属性 Dictionary dic1_SortedByKey = dic1.OrderBy(o => o.Value.stuAge).ToDictionary(p => p.Key, o => o.Value); foreach (KeyValuePair 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 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 dic1 = new Dictionary(); dic1.Add(3, cn1); dic1.Add(1, cn2); dic1.Add(2, cn3); //上面dic1.Add()故意不按照顺序 //Key升序 //Dictionary dic1_SortedByKey = dic1.OrderBy(p=>p.Key).ToDictionary(p => p.Key, o => o.Value); //Key降序 //Dictionary dic1_SortedByKey = dic1.OrderByDescending(p => p.Key).ToDictionary(p => p.Key, o => o.Value); //Value中stuAge属性 //Dictionary dic1_SortedByKey = dic1.OrderBy(o => o.Value.stuAge).ToDictionary(p => p.Key, o => o.Value); //混合排序 等同于下列的linq语句 //Dictionary 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 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 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;

结果截图:

          

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3