C# sort dictionary list except first pair
我想查一下字典
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Program { static void Main() { // Example dictionary. var dictionary = new Dictionary<string, int>(5); dictionary.Add("cat", 3); dictionary.Add("dog", 1); dictionary.Add("mouse", 0); dictionary.Add("elephant", 2); dictionary.Add("bird", 4); var items = from pair in dictionary orderby pair.Value ascending select pair; // Display results. foreach (KeyValuePair<string, int> pair in items) { Console.WriteLine("{0}: {1}", pair.Key, pair.Value); } items = from pair in dictionary orderby pair.Value descending select pair; } } |
结果是
1 2 3 4 5 | mouse dog elephant cat bird |
号
但是我需要排除第一对来排序其余的并得到这个结果
1 2 3 4 5 | cat mouse dog elephant bird |
我能从这里做些什么吗?
1 2 3 | var items = from pair in dictionary orderby pair.Value ascending select pair; |
。
我建议使用LINQ
1 2 3 4 5 6 | var result = dictionary .Take(1) // Take first element .Concat(dictionary // Skip first element and sort the rest on value. .Skip(1) .OrderBy(o=>o.Value)) .Select(x=>x.Key); |
。
产量
1 2 3 4 5 | cat , mouse , dog , elephant , bird |
检查这个
埃多克斯1〔2〕
你明白我的想法了
您可以尝试使用此代码:
1 2 3 | var first = dictionary.Take(1); var orderedRest = dictionary.Skip(1).OrderBy(p => p.Value); var items = first.Union(orderedRest); |
。
我已经提到过IOD,我认为字典不是适合这个的集合类型。我认为你应该使用
1 2 3 4 5 | var firstItems = dictionary.Take(1); var sortItems = from pair in dictionary.Skip(1) orderby pair.Value ascending select pair; var items = firstItems.Concat(sortItems); |
当心
根据它的执行情况,在项目移除后,订单将被混乱处理。
exclude the first pair
号
我建议不要按订单注明你的项目。
您可以使用linq
1 | dictionary.OrderBy(t => t.Value).ToDictionary(t => t.Key, t=> t.Value); |
号
试试这个
1 2 3 4 | var result = YourList.OrderBy(mc => mc.SomePropToSortOn) .ToDictionary(mc => mc.Key.ToString(), mc => mc.Value.ToString(), StringComparer.OrdinalIgnoreCase); |