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

时间:2009-06-11 15:58:33

标签: c# .net list lambda sortedlist

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

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

4 个答案:

答案 0 :(得分:24)

你的意思是:

  1. 您有一个List<T>并希望将其排序到位吗?
  2. 您有List<T>并希望创建另一个“列表”,该列表本身已排序
  3. 您有一个List<T>,并希望设置一个SortedList<T,T>,其中键与值相同
  4. 假设输入:

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

    1是微不足道的

    x.Sort();
    

    2是微不足道的

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

    3带有副本

    是微不足道的
    var s = new SortedList<int,int>(t.ToDictionary(i => i));
    

    更有效率:

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

    我看不到为什么你想做3但是你去了。

答案 1 :(得分:17)

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:2)

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

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