C# SortedDictionary<TKey,TValue>排序 用法 Sort()用法

使用过Dictionary的人都知道,当每一个Add里面的值都不会改变其顺序,所以需要需要对其排序的时候就用到SortedDictionary,但SortedDictionary并不是那么理想,其默认的方式只支持正序排序,想要反序排序时必须得靠自己重新编写代码,下面来看一个简单的例子:

如以下代码在调试时不能使用则需要引用:

using System.Linq;

using System.Collections.Generic;

复制代码
  
  
1 private void TestDictionarySort() 2 { 3 SortedDictionary < string , string > sd = new SortedDictionary < string , string > (); 4 sd.Add( " 321 " , " fdsgsags " ); 5 sd.Add( " acb " , " test test " ); 6 sd.Add( " 1123 " , " lslgsgl " ); 7 sd.Add( " 2bcd13 " , " value " ); 9   10 foreach (KeyValuePair < string , string > item in sd) 11 { 12 Response.Write( " 键名: " + item.Key + " 键值: " + item.Value); 13 } 14 15 }
复制代码

上面代码输出效果:

键名:1123 键值:lslgsgl
键名:2bcd13 键值:value
键名:321 键值:fdsgsags
键名:acb 键值:test test

好了,现在我们来看一下反序排序的效果,请看下面的代码:

复制代码
  
  
private void TestDictionarySort() { SortedDictionary < string , string > sd = new SortedDictionary < string , string > (); sd.Add( " 321 " , " fdsgsags " ); sd.Add( " acb " , " test test " ); sd.Add( " 1123 " , " lslgsgl " ); sd.Add( " 2bcd13 " , " value " );   Response.Write( " <br />正序排序数据:<br /> " ); foreach (KeyValuePair < string , string > item in sd) { Response.Write( " 键名: " + item.Key + " 键值: " + item.Value + " <br /> " ); } // 重新封装到Dictionary里(PS:因为排序后我们将不在使用排序了,所以就使用Dictionary) Dictionary < string , string > dc = new Dictionary < string , string > (); foreach (KeyValuePair < string , string > item in sd.Reverse()) { dc.Add(item.Key, item.Value); } sd = null ; // 再看其输出结果: Response.Write( " <br />反序排序数据:<br /> " ); foreach (KeyValuePair < string , string > item in dc) { Response.Write( " 键名: " + item.Key + " 键值: " + item.Value + " <br /> " ); } }
复制代码

上面代码输出效果:

正序排序数据:
键名:1123 键值:lslgsgl
键名:2bcd13 键值:value
键名:321 键值:fdsgsags
键名:acb 键值:test test

反序排序数据:
键名:acb 键值:test test
键名:321 键值:fdsgsags
键名:2bcd13 键值:value

键名:1123 键值:lslgsgl


具有相同的Key时的排序。Value是相同key的集合

        internal List<BoxDetailInfo> MergeListBySkuUdf1_AiWei(List<BoxDetailInfo> boxDetailList)
        {
            var sortDictionary = new SortedDictionary<string, List<BoxDetailInfo>>();

            foreach (var boxDetailInfo in boxDetailList)
            {
                if (sortDictionary.ContainsKey(boxDetailInfo.skuUdf1))
                {
                    sortDictionary[boxDetailInfo.skuUdf1].Add(boxDetailInfo);
                }
                else
                {
                    sortDictionary.Add(boxDetailInfo.skuUdf1, new List<BoxDetailInfo>() { boxDetailInfo });
                }
            }

            var dictionaryList = new List<BoxDetailInfo>();
            foreach (List<BoxDetailInfo> pair in sortDictionary.Values)
            {
                foreach (BoxDetailInfo DetailInfo in pair)
                {
                    dictionaryList.Add(DetailInfo);
                }
            }

            return dictionaryList;
        }



Sort()排序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 测试
{
    class Program
    {
        static void Main(string[] args)
        {
            List<String> list = new List<string>();
            list.Add("-1");
            list.Add("-11");
            list.Add("2");
            list.Add("4");
            list.Add("110");
            list.Add("-29");
            list.Add("10");

            list.Sort(MyCompareString);

            foreach (string a in list )
            {
               Console.WriteLine("{0}", a);
            }
        }

        private static int MyCompareString(string x, string y)
        {
            return int.Parse(y).CompareTo(int.Parse(x));
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值