如何按照数组中的字典的key(int)来排序数组,谢谢!

lewiskkk 2014-04-14 10:12:40
我有几个字典全部是<int, string>类型的,每个字典里只存放一组数据,把这几个字典放到数组里面,请问如何按照字典的key(int)从小到大排列数组?

比如:



int a = 3;
int b = 5;
int c = 9;
int d = 1;
int e = 7;

Dictionary<int, string> dict1= new Dictionary<int,string>
{
{a, "OK"}
};
Dictionary<int, string> dict2= new Dictionary<int,string>
{
{b, "OKK"}
};
Dictionary<int, string> dict3= new Dictionary<int,string>
{
{c, "OOKK"}
};
Dictionary<int, string> dict4= new Dictionary<int,string>
{
{d, "OKOK"}
};
Dictionary<int, string> dict5= new Dictionary<int,string>
{
{e, "OKKO"}
};

Dictionary<int, string>[] dict = new Dictionary<int,string>[]
{
dict1, dict2, dict3, dict4, dict5
};
...全文
585 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzelin 2014-04-17
  • 打赏
  • 举报
回复
请结贴吧
寂空冷 2014-04-15
  • 打赏
  • 举报
回复
引用 9 楼 u014030598 的回复:
[quote=引用 7 楼 lihui398 的回复:] dict = dict.ToList().OrderBy(dic => dic.Keys.First()).ToArray();
谢谢啊!这个是我想要的![/quote] 找到想要的就结贴了,准备接分
寂空冷 2014-04-15
  • 打赏
  • 举报
回复
引用 10 楼 u014030598 的回复:
[quote=引用 7 楼 lihui398 的回复:] dict = dict.ToList().OrderBy(dic => dic.Keys.First()).ToArray();
再请问,如何把这个5个字典加到 List 里面,如何按我想要的排序? 照着你的写了一下,有错误。谢谢![/quote] linq提供了升序和倒序,自定义排序的话,得自己写逻辑了。
lewiskkk 2014-04-14
  • 打赏
  • 举报
回复
引用 2 楼 q107770540 的回复:
dict.OrderBy(x=>x.Keys.First())
这个方法不行啊,我打印出来的value(string)还是原先的顺序

Console.WriteLine(" {0} {1} {2} {3} {4}", dict[0].Values.First(), dict[1].Values.First(), dict[2].Values.First(), dict[3].Values.First(), dict[4].Values.First());
我要打印出来的value(string), 是按照key(int)排列好的顺序打印的
种草德鲁伊 2014-04-14
  • 打赏
  • 举报
回复
用SortedDictionary
  • 打赏
  • 举报
回复
楼主可以使用Array类的Sort<T>(T[] array, IComparer<T> comparer)这个方法
q107770540 2014-04-14
  • 打赏
  • 举报
回复
dict.OrderBy(x=>x.Keys.First())
moonwrite 2014-04-14
  • 打赏
  • 举报
回复
http://happyboy200032.blog.163.com/blog/static/469031132011111654345686/ 自己参考一下~
youzelin 2014-04-14
  • 打赏
  • 举报
回复
引用 8 楼 u014030598 的回复:
[quote=引用 6 楼 youzelin 的回复:] [quote=引用 5 楼 u014030598 的回复:] [quote=引用 2 楼 q107770540 的回复:]
dict.OrderBy(x=>x.Keys.First())
这个方法不行啊,我打印出来的value(string)还是原先的顺序

Console.WriteLine(" {0} {1} {2} {3} {4}", dict[0].Values.First(), dict[1].Values.First(), dict[2].Values.First(), dict[3].Values.First(), dict[4].Values.First());
我要打印出来的value(string), 是按照key(int)排列好的顺序打印的[/quote] 你需要用变量引用的,OrderBy 他返回的对象是排序好的,并非对原集合进行修改。

int a = 3;
int b = 5;
int c = 9;
int d = 1;
int e = 7;

Dictionary<int, string> dict1 = new Dictionary<int, string> { { a, "OK" } };
Dictionary<int, string> dict2 = new Dictionary<int, string> { { b, "OKK" } };
Dictionary<int, string> dict3 = new Dictionary<int, string> { { c, "OOKK" } };
Dictionary<int, string> dict4 = new Dictionary<int, string> { { d, "OKOK" } };
Dictionary<int, string> dict5 = new Dictionary<int, string> { { e, "OKKO" } };
Dictionary<int, string>[] dict = new Dictionary<int, string>[] { dict1, dict2, dict3, dict4, dict5 };

var orderedDict = dict.OrderBy(subDict => subDict.Keys.First());
foreach (var item in orderedDict)
{
    Console.WriteLine(item.First());
}
你可以再试试![/quote] 谢谢,这样是可以遍历打印出来,但是我想要排序后单独拿出来使用,像 dict[0].Values.First(),怎么能拿到这个sring? 谢谢![/quote]

var specifiedItem = orderedDict.ElementAt(1).First();
Console.WriteLine(specifiedItem.Key + " : " + specifiedItem.Value);
lewiskkk 2014-04-14
  • 打赏
  • 举报
回复
引用 7 楼 lihui398 的回复:
dict = dict.ToList().OrderBy(dic => dic.Keys.First()).ToArray();
再请问,如何把这个5个字典加到 List 里面,如何按我想要的排序? 照着你的写了一下,有错误。谢谢!
lewiskkk 2014-04-14
  • 打赏
  • 举报
回复
引用 7 楼 lihui398 的回复:
dict = dict.ToList().OrderBy(dic => dic.Keys.First()).ToArray();
谢谢啊!这个是我想要的!
lewiskkk 2014-04-14
  • 打赏
  • 举报
回复
引用 6 楼 youzelin 的回复:
[quote=引用 5 楼 u014030598 的回复:] [quote=引用 2 楼 q107770540 的回复:]
dict.OrderBy(x=>x.Keys.First())
这个方法不行啊,我打印出来的value(string)还是原先的顺序

Console.WriteLine(" {0} {1} {2} {3} {4}", dict[0].Values.First(), dict[1].Values.First(), dict[2].Values.First(), dict[3].Values.First(), dict[4].Values.First());
我要打印出来的value(string), 是按照key(int)排列好的顺序打印的[/quote] 你需要用变量引用的,OrderBy 他返回的对象是排序好的,并非对原集合进行修改。

int a = 3;
int b = 5;
int c = 9;
int d = 1;
int e = 7;

Dictionary<int, string> dict1 = new Dictionary<int, string> { { a, "OK" } };
Dictionary<int, string> dict2 = new Dictionary<int, string> { { b, "OKK" } };
Dictionary<int, string> dict3 = new Dictionary<int, string> { { c, "OOKK" } };
Dictionary<int, string> dict4 = new Dictionary<int, string> { { d, "OKOK" } };
Dictionary<int, string> dict5 = new Dictionary<int, string> { { e, "OKKO" } };
Dictionary<int, string>[] dict = new Dictionary<int, string>[] { dict1, dict2, dict3, dict4, dict5 };

var orderedDict = dict.OrderBy(subDict => subDict.Keys.First());
foreach (var item in orderedDict)
{
    Console.WriteLine(item.First());
}
你可以再试试![/quote] 谢谢,这样是可以遍历打印出来,但是我想要排序后单独拿出来使用,像 dict[0].Values.First(),怎么能拿到这个sring? 谢谢!
寂空冷 2014-04-14
  • 打赏
  • 举报
回复
dict = dict.ToList().OrderBy(dic => dic.Keys.First()).ToArray();
youzelin 2014-04-14
  • 打赏
  • 举报
回复
引用 5 楼 u014030598 的回复:
[quote=引用 2 楼 q107770540 的回复:]
dict.OrderBy(x=>x.Keys.First())
这个方法不行啊,我打印出来的value(string)还是原先的顺序

Console.WriteLine(" {0} {1} {2} {3} {4}", dict[0].Values.First(), dict[1].Values.First(), dict[2].Values.First(), dict[3].Values.First(), dict[4].Values.First());
我要打印出来的value(string), 是按照key(int)排列好的顺序打印的[/quote] 你需要用变量引用的,OrderBy 他返回的对象是排序好的,并非对原集合进行修改。

int a = 3;
int b = 5;
int c = 9;
int d = 1;
int e = 7;

Dictionary<int, string> dict1 = new Dictionary<int, string> { { a, "OK" } };
Dictionary<int, string> dict2 = new Dictionary<int, string> { { b, "OKK" } };
Dictionary<int, string> dict3 = new Dictionary<int, string> { { c, "OOKK" } };
Dictionary<int, string> dict4 = new Dictionary<int, string> { { d, "OKOK" } };
Dictionary<int, string> dict5 = new Dictionary<int, string> { { e, "OKKO" } };
Dictionary<int, string>[] dict = new Dictionary<int, string>[] { dict1, dict2, dict3, dict4, dict5 };

var orderedDict = dict.OrderBy(subDict => subDict.Keys.First());
foreach (var item in orderedDict)
{
    Console.WriteLine(item.First());
}
你可以再试试!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧