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

Bud*_*Joe 15 .net c# lambda list sortedlist

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

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

Shu*_*oUk 25

你的意思是:

  1. 你有一个List<T>并希望它被分类到位?
  2. 你有一个List<T>并希望创建另一个"列表",它本身已经排序
  3. 你有一个List<T>并希望在一个SortedList<T,T>键的位置与值相同

假设输入:

var x = new List<int>() { 3, 2, 1 };    
Run Code Online (Sandbox Code Playgroud)

1是微不足道的

x.Sort();
Run Code Online (Sandbox Code Playgroud)

2是微不足道的

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

3是微不足道的副本

var s = new SortedList<int,int>(t.ToDictionary(i => i));
Run Code Online (Sandbox Code Playgroud)

并且更有效率:

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

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


BFr*_*ree 18

var list = new List<string>();
var sortedList = new SortedList<string, string>(list.ToDictionary(s => s));
Run Code Online (Sandbox Code Playgroud)

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