C#中Dictionary<TKey,TValue>排序方式的实现
更新时间:2021年02月26日 10:32:45 作者:浮海扬尘
这篇文章主要介绍了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):
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(); } } }
关键修改这句:
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;
结果截图:
到此这篇关于C#中Dictionary<TKey,TValue>排序方式的实现的文章就介绍到这了,更多相关C# Dictionary<TKey,TValue>排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- C# ArrayList、HashSet、HashTable、List、Dictionary的区别详解
- C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)
- C#数组中List, Dictionary的相互转换问题
- C#常见的几种集合 ArrayList,Hashtable,List<T>,Dictionary<K,V> 遍历方法对比
- C#并发容器之ConcurrentDictionary与普通Dictionary带锁性能详解
- C# 解决在Dictionary中使用枚举的效率问题
- C#字典Dictionary的用法说明(注重性能版)
- c# 用Dictionary实现日志数据批量插入
- 聊聊C# 中HashTable与Dictionary的区别说明
- c# List和Dictionary常用的操作
相关文章
C#中泛型容器Stack<T>的用法并实现”撤销/重做”功能
这篇文章介绍了C#中泛型容器Stack<T>的用法并实现”撤销/重做”功能,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-10-10
最新评论