C#对除第一对之外的字典列表进行排序

本文关键字:列表 字典 排序 | 更新日期: 2023-09-27 17:53:51

我正在尝试对字典进行排序

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

结果是

mouse
dog
elephant
cat
bird

但我需要排除第一对来对其余的进行排序,并得到这个结果

cat
mouse
dog
elephant
bird   

我能在这里做点什么吗?

var items = from pair in dictionary
                orderby pair.Value ascending
                select pair;

C#对除第一对之外的字典列表进行排序

我建议使用Linq

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

输出

   cat   ,
   mouse   ,
   dog   ,
   elephant   ,
   bird

检查此Demo

dictionary.Take(1).Concat(dictionary.Skip(1).OrderBy({ logic }))

你明白了,我认为

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不能保证订单。

根据它的实施,订单在项目移除后会被打乱一次。

排除第一对

我建议不要按订单记下你的项目。

试试这样的

var result = YourList.OrderBy(mc => mc.SomePropToSortOn)
                   .ToDictionary(mc => mc.Key.ToString(), 
                                 mc => mc.Value.ToString(), 
                                 StringComparer.OrdinalIgnoreCase);

您可以使用LINQ .OrderBy:

dictionary.OrderBy(t => t.Value).ToDictionary(t => t.Key, t=> t.Value);

您可以尝试使用以下代码:

var first = dictionary.Take(1);
var orderedRest = dictionary.Skip(1).OrderBy(p => p.Value);
var items = first.Union(orderedRest);

我已经提到,我认为Dictionary不是适合这种情况的集合类型。在我看来,你应该使用List<KeyValuePair<string, int>>。上面的代码也适用于列表。