C#排序字典列表,第一对除外


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

检查这个Demo


埃多克斯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,我认为字典不是适合这个的集合类型。我认为你应该使用List>。上面的代码也适用于列表。


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);

当心Dictionary不保证订单。

根据它的执行情况,在项目移除后,订单将被混乱处理。

exclude the first pair

我建议不要按订单注明你的项目。


您可以使用linq .OrderBy

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);