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
中执行此操作,但显然,更改正在迭代的内容是个坏主意。aDictionary
未排序。要对字典进行排序,可以使用
要对列表进行排序,可以使用
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 };