C#字典Dictionary排序(顺序、倒序)

这里是针对.NET版本过低的排序方式,没怎么用过,记录一下;

一、创建字典Dictionary 对象

  假如 Dictionary 中保存的是一个网站页面流量,key 是网页名称,值value对应的是网页被访问的次数,由于网页的访问次要不断的统计,所以不能用 int 作为 key,只能用网页名称,创建 Dictionary 对象及添加数据代码如下:

Dictionary<string, int> dic = new Dictionary<string, int>();
  dic.Add("index.html", 50);
  dic.Add("product.html", 13);
  dic.Add("aboutus.html", 4);
  dic.Add("online.aspx", 22);
  dic.Add("news.aspx", 18);

二、.net 2.0 版本 Dictionary排序

List<KeyValuePair<string, int>> lst = new List<KeyValuePair<string, int>>(dic);

  //倒叙排列:只需要把变量s2 和 s1 互换就行了 例: return s1.Value.CompareTo(s2.Value);
  //进行排序 目前是顺序

      lst.Sort(delegate(KeyValuePair<string, int> s1, KeyValuePair<string, int> s2)  
      {
        return s2.Value.CompareTo(s1.Value);
      });
      dic.Clear();

 三、.net 3.5 以上版本 Dictionary排序(即 linq dictionary 排序)

  使用linq排序

var dicSort = from objDic in dic orderby objDic.Value descending select objDic;
输出要用这个输出:
foreach(KeyValuePair<string, int> kvp in dicSort)
{
  Response.Write(kvp.Key + "" + kvp.Value + "<br />");
}

 

转载于:https://www.cnblogs.com/wt-vip/p/5997094.html

C#中,对 `Dictionary` 进行倒序操作主要依赖于排序机制,并将其结果重新构造为新的字典。根据使用的 .NET 版本不同,可以采用不同的方法来实现这一功能。 ### 使用LINQ对Dictionary进行倒序操作(.NET 3.5及以上版本) 在 .NET 3.5 及以上版本中,可以通过 LINQ 实现简洁的倒序操作。以下代码展示了如何根据值进行降序排列,并将排序后的结果转换为一个新的 `Dictionary`: ```csharp using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { Dictionary<string, int> dic = new Dictionary<string, int>(); dic.Add("index.html", 50); dic.Add("product.html", 13); dic.Add("aboutus.html", 4); dic.Add("online.aspx", 22); dic.Add("news.aspx", 18); var sortedDic = dic.OrderByDescending(kvp => kvp.Value).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); foreach (var item in sortedDic) { Console.WriteLine($"{item.Key}: {item.Value}"); } } } ``` 上述代码中,`OrderByDescending` 方法用于按照值进行降序排列,而 `ToDictionary` 则将排序后的键值对重新构造为一个新的字典[^1]。 ### 使用自定义排序逻辑对Dictionary进行倒序操作(.NET 2.0) 在 .NET 2.0 中,由于缺乏 LINQ 支持,需要手动实现排序逻辑。可以通过将字典内容复制到一个 `List<KeyValuePair<string, int>>` 中,然后使用 `Sort` 方法结合自定义比较逻辑来实现倒序排列: ```csharp using System; using System.Collections.Generic; class Program { static void Main() { Dictionary<string, int> dic = new Dictionary<string, int>(); dic.Add("index.html", 50); dic.Add("product.html", 13); dic.Add("aboutus.html", 4); dic.Add("online.aspx", 22); dic.Add("news.aspx", 18); List<KeyValuePair<string, int>> lst = new List<KeyValuePair<string, int>>(dic); lst.Sort(delegate(KeyValuePair<string, int> s1, KeyValuePair<string, int> s2) { return s2.Value.CompareTo(s1.Value); }); Dictionary<string, int> sortedDic = new Dictionary<string, int>(); foreach (var item in lst) { sortedDic.Add(item.Key, item.Value); } foreach (var item in sortedDic) { Console.WriteLine($"{item.Key}: {item.Value}"); } } } ``` 上述代码中,通过 `Sort` 方法结合自定义委托实现了根据值的大小进行倒序排列[^2]。 ### 注意事项 - **字典的不可变性**:`Dictionary` 是无序的集合,因此排序后的结果需要重新构造为一个新的字典。 - **性能考虑**:对于大型字典,频繁的排序操作可能会导致性能问题,因此需要合理选择排序时机。 - **键的唯一性**:在重新构造新的字典时,需要确保键的唯一性,否则会抛出异常。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值