软件编程
位置:首页>> 软件编程>> C#编程>> C#中Dictionary<TKey,TValue>排序方式的实现

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

作者:浮海扬尘  发布时间:2021-07-13 10:59:10 

标签:C#,Dictionary,排序

自定义类:


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

结果截图:

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

降序排序:


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

结果截图:

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

按照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);

结果截图:

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

混合排序:类似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>排序方式的实现

来源:https://www.cnblogs.com/5696-an/p/5625142.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com