.NET / C# – 将列表转换为SortedList

将List转换为SortedList的最佳方法是什么? 没有骑自行车的任何好方法吗? 用OrderBy()做任何聪明的方法吗?

WRAP UP请阅读所有答案和评论。

var list = new List(); var sortedList = new SortedList(list.ToDictionary(s => s)); 

现在我不知道这是多么有效,但它是一行代码:)另外,在这个例子中我只使用字符串本身作为选择器。 在实际场景中,您应该提前知道要用作选择器的内容。

你的意思是:

  1. 你有一个List并希望它被分类到位?
  2. 你有一个List并希望创建另一个自己排序的’列表’
  3. 你有一个List并希望生成一个SortedList ,其中键与值相同

假设输入:

 var x = new List() { 3, 2, 1 }; 

1是微不足道的

 x.Sort(); 

2是微不足道的

 // sx is an IOrderedEnumerable, you can call ToList() on it if you want var sx = x.OrderBy(i => i); 

3是微不足道的副本

 var s = new SortedList(t.ToDictionary(i => i)); 

并且更有效率:

 var s = new SortedList(); foreach (var i in x) { s[i] = [i]; } 

我不明白为什么要做3但是你去了。

理解List是智能数组,而SortedList是键/值二进制树。 由于它们的结构之间没有关系,因此不可能有更有效的方法来实现它,而不是简单地从列表中取出每个元素并将其放入树中。

如果您的意思是“排序列表”而不是“ SortedList ”,那么通过List.Sort()或适当的OrderBy()对列表进行排序是微不足道的。

 List unsortedPersons = new List(); // ... Populate unsortedPersons ... var sorted = from person in unsortedPersons orderby person.Name select person; 

LINQ为您提供了一个ISortedEnumerable,我相信这可能足以满足您的需求。