Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.135.202] |
|
Сообщ.
#1
,
|
|
|
Пишу контрол... ну да не суть, что я пишу - задачка универсальная.
Есть IList (расчет на любой юзерский List<T>). При сортировке первым делом кеширую строки: они могут добываться разными способами: через отражение полей и свойств либо событие, так что, думаю, так будет быстрее. Далее, как вариант, можно конвертнуть список в массив и после сортировки назад, потому как у Array есть такая версия Sort(): void Sort() { var values = new string[_Content.Count]; ... // кеширование строковых значений var content = new object[_Content.Count]; _Content.CopyTo(content, 0); Array.Sort(values, content, new StringSorter(Sorting.Order == SortOrder.Descending)); _Content.Clear(); for (int i = 0; i < content.Length; i++) _Content.Add(content[i]); } public class StringSorter: IComparer<string> { bool Descending; public StringSorter(bool desc) { Descending = desc; } public int Compare(string x, string y) { int result = string.Compare(x, y); return Descending ? -result : result; } } Но мне этот вариант не очень как-то. У IList своей сортировки нет вообще, но его принимает ArrayList.Adapter... в общем, подскажите альтернативы какие видите, будь то использование ArrayList, Linq или еще чего-то. |
Сообщ.
#2
,
|
|
|
using System.Linq; <...> class Program { static void Main(string[] args) { IList<string> list = new List<string>(); for (char letter = 'Z'; letter >= 'A'; letter--) { list.Add(letter.ToString()); } IList<string> orderedList = ((IList<string>)list).OrderBy(x=>x).ToList(); IList<string> revertedList = orderedList.OrderByDescending(x=>x).ToList(); } } C Linq будет как-то так. |