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

时间:2016-07-01 05:56:12

标签: c#

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

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;

6 个答案:

答案 0 :(得分:3)

我建议使用 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

答案 1 :(得分:1)

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

你明白了我的想法

答案 2 :(得分:0)

尝试这样的事情

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

答案 3 :(得分:0)

您可以使用LINQ .OrderBy

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

答案 4 :(得分:0)

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

根据其实施,订单将在项目移除后搞砸一次。

  

排除第一对

我建议您不要按订单记下您的商品。

答案 5 :(得分:0)

您可以尝试使用此代码:

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

我已经提到过,我认为词典不是正确的收藏类型。在我看来,你应该使用List<KeyValuePair<string, int>>。上面的代码也适用于列表。