C# 为字典排序<;int,List<;int>&燃气轮机;按键+;列表中的值

C# 为字典排序<;int,List<;int>&燃气轮机;按键+;列表中的值,c#,.net,linq,C#,.net,Linq,假设我们有一个 var dictionary= new Dictionary<int, IList<int>>(); 变为 我试着在foreach中执行此操作,但显然,更改正在迭代的内容是个坏主意。aDictionary未排序。要对字典进行排序,可以使用 要对列表进行排序,可以使用List.OrderBy()循环浏览字典项并分别对每个列表进行排序。它将如下所示: var dictionary = new Dictionary<int, IList&

假设我们有一个

var dictionary= new Dictionary<int, IList<int>>();
变为


我试着在
foreach
中执行此操作,但显然,更改正在迭代的内容是个坏主意。

a
Dictionary
未排序。要对字典进行排序,可以使用


要对列表进行排序,可以使用
List.OrderBy()

循环浏览字典项并分别对每个列表进行排序。它将如下所示:

        var dictionary = new Dictionary<int, IList<int>>();
        var orderedItems = dictionary
                               .OrderBy(pair => pair.Key)
                               .Select(new {
                                        Key = pair.Key, 
                                        Value = pair.Value.OrderBy(i => i)});
分类词典

之后:

foreach (System.Collections.Generic.KeyValuePair<int,IList<int>> list in dictionary)
        { 
            SortDictionary( list.Value)
        }
foreach(字典中的System.Collections.Generic.KeyValuePair列表)
{ 
SortDictionary(list.Value)
}
试试这个:

    // Creating test data
    var dictionary = new Dictionary<int, IList<int>>
    {
        { 1, new List<int> { 2, 1, 6 } },
        { 5, new List<int> { 2, 1 } },
        { 2, new List<int> { 2, 3 } }
    };

    // Ordering as requested
    dictionary = dictionary
        .OrderBy(d => d.Key)
        .ToDictionary(
            d => d.Key,
            d => (IList<int>)d.Value.OrderBy(v => v).ToList()
        );

    // Displaying the results
    foreach(var kv in dictionary)
    {
        Console.Write("\n{0}", kv.Key);
        foreach (var li in kv.Value)
        {
            Console.Write("\t{0}", li);
        }
    }
//创建测试数据
var字典=新字典
{
{1,新列表{2,1,6},
{5,新列表{2,1},
{2,新列表{2,3}
};
//按要求订购
字典
.OrderBy(d=>d.Key)
.ToDictionary(
d=>d.键,
d=>(IList)d.Value.OrderBy(v=>v.ToList())
);
//显示结果
foreach(字典中的var kv)
{
Console.Write(“\n{0}”,kv.Key);
foreach(以千伏值为单位的var li)
{
编写(“\t{0}”,li);
}
}

您可以使用LINQ对字典的内容进行如下排序:

        var dictionary = new Dictionary<int, IList<int>>();
        var orderedItems = dictionary
                               .OrderBy(pair => pair.Key)
                               .Select(new {
                                        Key = pair.Key, 
                                        Value = pair.Value.OrderBy(i => i)});

如果需要将生成的IEnumerable用作列表或数组,可以使用ToList或ToArray创建一个。但是,在大多数情况下,您可以直接使用IEnumerable,因为它是

-1:不回答问题,请重新阅读。OP不想对字典排序,他/她只想将其排序后输出。@leppie我又读了一遍。但OP仍然明确表示他/她想要一个“分类版本”。字典的分类版本是,好吧,去猜吧。不管怎样,谢谢你的否决票。“我想要的是一个分类版本”-你想要怎样的版本?作为输出或作为新集合?失败!当转到dictionary.Oops时,顺序将丢失,直接从工作代码复制。现在改变它这是错误的有两个原因。第一,把它们放回字典,你又一次破坏了他喜欢的顺序。第二,您不能将
IOrderedEnumerable
强制转换为
IList
。我们确实错过了ToList调用。尽管如此,秩序还是维持着。但是,通过最后调用
ToDictionary
,您将项目放回无序的集合。“工作”部分是巧合,没有记录。实现可能会改变。要记住的是,根据定义,字典是一个无序的集合。
        var dictionary = new Dictionary<int, IList<int>>();
        var orderedItems = dictionary
                               .OrderBy(pair => pair.Key)
                               .Select(new {
                                        Key = pair.Key, 
                                        Value = pair.Value.OrderBy(i => i)});
            var orderedItems =from pair in dictionary
                  orderby pair.Key
                  let values = pair.Value.OrderBy(i => i)
                  select new { Key = pair.Key, Value = values };