Что мне передать в List <Object>.Sort (), чтобы отсортировать элементы с наименьшим по величине по Object.SomeInteger? - PullRequest
2 голосов
/ 26 января 2011
List<MyObject> myList = new List<MyObject>();

foreach(SomeObject obj in someObjects)
{
     MyObject mo = new MyObject();

     mo.SomeInteger = obj.OriginalInteger;
     mo.OtherRandomData = obj.OtherRandomData;

     myList.Add(obj);
}

myList.Sort(/* NOT SURE WHAT TO WRITE HERE */);

Так что в конечном итоге MyObjects в myList упорядочены в порядке наименьшего по SomeInteger.

Ответы [ 5 ]

5 голосов
/ 26 января 2011

Вы можете принять перегрузку Sort, которая принимает делегата Comparison<T>:

myList.Sort((x, y) => x.SomeInteger.CompareTo(y.SomeInteger));
3 голосов
/ 26 января 2011

Ответ Стивена в порядке, но если вы используете .NET 3.5 или выше, вам также следует рассмотреть возможность использования LINQ.Весь ваш код может быть записан как:

var myList = (from obj in someObjects
              orderby obj.OriginalInteger
              select new MyObject { SomeInteger = obj.OriginalInteger,
                                   OtherRandomData = obj.OtherRandom Data })
             .ToList();

Обратите внимание, что это упорядочение по исходным данным, а не построение сначала значений MyObject и сортировка , а затем .Вы также можете написать это как:

var myList = someObjects.OrderBy(obj => obj.OriginalInteger)
                        .Select(obj => new MyObject { 
                                   SomeInteger = obj.OriginalInteger,
                                   OtherRandomData = obj.OtherRandom Data })
                        .ToList();

Обратите внимание, что если вы хотите отсортировать по нескольким свойствам, это очень просто с LINQ, но может быть немного громоздким с List<T>.Sort.

0 голосов
/ 16 ноября 2013
myList.Sort();
myList.Reverse();

Этот простой код должен упорядочивать его от наименьшего к наибольшему. Но так как от наименьшего к наименьшему - это как раз от наименьшего к наибольшему, я использовал функцию Reverse.

0 голосов
/ 26 января 2011

Вы можете посмотреть на этот образец: http://msdn.microsoft.com/en-us/library/w56d4y5z.aspx

Или, вы можете делать вещи в стиле Linq:

myList = myList.OrderBy(x => x.SomeInteger).ToList();
0 голосов
/ 26 января 2011

Вы также можете использовать OrderBy (), чтобы избежать необходимости указывать полную логику сравнения:

myList = myList.OrderBy(x=>x.SomeInteger).ToList();

Это будет медленнее, чем List.Sort (), и SomeInteger должен быть IComparable (все значения ValueTypes), но сортировка будет стабильной (в случае «связей» элементы сохраняют свой относительный порядок в несортированном списке) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...