代码之家  ›  专栏  ›  技术社区  ›  BuddyJoe

.NET/C-将列表转换为排序列表

  •  14
  • BuddyJoe  · 技术社区  · 15 年前

    将列表转换为SortedList的最佳方法是什么?有什么好方法不用骑自行车就可以做到吗?使用orderby()有什么聪明的方法吗?

    包扎 请阅读所有答案和评论。

    4 回复  |  直到 15 年前
        1
  •  17
  •   BFree    15 年前
    var list = new List<string>();
    var sortedList = new SortedList<string, string>(list.ToDictionary(s => s));
    

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

        2
  •  24
  •   ShuggyCoUk    15 年前

    你的意思是:

    1. 你有一个 List<T> 希望它被适当地分类?
    2. 你有一个 列表& T; 并希望创建另一个本身已排序的“列表”
    3. 你有一个 列表& T; 并希望 SortedList<T,T> 其中键与值相同

    假设输入:

    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个,但你去了。

        3
  •  4
  •   mqp    15 年前

    理解这一点 List<T> 是一个智能阵列, SortedList<T, U> 是键/值二叉树。由于它们的结构之间没有关系,因此不可能有一种更有效的方法来完成这项工作,而不仅仅是从列表中提取每个元素并将其放入树中。

    如果您的意思是“排序列表”而不是 SortedList “然后,通过任何一种方式对列表进行排序都是很简单的。 List.Sort() 或适当的 OrderBy() .

        4
  •  2
  •   Will Eddins ianpoley    15 年前

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

    我相信林肯给了你一个无穷无尽的东西,这也许对你的目的足够好。