Каков наилучший способ преобразования списка в SortedList? Любой хороший способ сделать это, не проезжая через него? Любой умный способ сделать это с помощью OrderBy()?
WRAP UP Пожалуйста, прочитайте все ответы и комментарии.
Каков наилучший способ преобразования списка в SortedList? Любой хороший способ сделать это, не проезжая через него? Любой умный способ сделать это с помощью OrderBy()?
WRAP UP Пожалуйста, прочитайте все ответы и комментарии.
var list = new List<string>();
var sortedList = new SortedList<string, string>(list.ToDictionary(s => s));
Теперь я не знаю, насколько это эффективно, но это одна строка кода:) Кроме того, в этом примере я просто использовал строку как селектор. В реальном сценарии вы должны заранее знать, что вы хотели бы использовать в качестве селектора.
Вы имеете в виду:
List<T>
и хотите, чтобы он был отсортирован на месте?List<T>
и вы хотите создать другой "список", который сам сортируетсяList<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, но там вы идете.
Поймите, что List<T>
- это интеллектуальный массив, а SortedList<T, U>
- двоичное дерево ключа/значения. Поскольку между их структурами нет никакой связи, не может быть более эффективного способа сделать это, а не просто взять каждый элемент из списка и поместить его в дерево.
Если вы имеете в виду "отсортированный список" вместо "SortedList
", тогда тривиально сортировать свой список через List.Sort()
или соответствующий OrderBy()
.
List unsortedPersons = new List();
// ... Populate unsortedPersons ...
var sorted = from person in unsortedPersons
orderby person.Name
select person;
LINQ дает вам ISortedEnumerable, я считаю, что может быть достаточно хорошим для ваших целей.