[转载]C# 谈Dictionary,SortedDictionary排序 – VvxT [Varvery] – 博客园.
使用过Dictionary的人都知道,当每一个Add里面的值都不会改变其顺序,所以 需要需要对其排序的时候就用到SortedDictionary,但SortedDictionary并不是那么理想,其默认的方式只支持正序排序,想要 反序排序时必须得靠自己重新编写代码,下面来看一个简单的例子:
测试环境为Web,如在WinForm下,调试则只需改一下输出语句即可。
如以下代码在调试时不能使用则需要引用:
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
好了,效果实现了,欢迎大家一起讨论出一个更好的方法来,欢迎拍砖!