2010-05-24 2 views

ответ

3

ArrayList несколько устарел. Мы используем общий List<T> класс в настоящее время *

Вы можете отсортировать список <T> на месте с помощью List<T>.Sort:.

List<Person> persons = // ... 

persons.Sort((a, b) => string.Compare(a.Name, b.Name)); 

или создать новый список <T> с помощью LINQ-х Enumerable.OrderBy:

List<Person> persons = // ... 

List<Person> sortedPersons = persons.OrderBy(p => p.Name).ToList(); 

(* Если вы не застряли в .NET Framework 1.1)

+0

Привет, я попробовал ваше первое предложение и сказал, что мне нужно использовать тип делегата? : s – Tom

+0

Я дважды проверял его, и он работает здесь. Какую версию фреймворка вы используете? Можете ли вы разместить свой код? Какое точное сообщение об ошибке вы получаете? – dtb

+0

Он говорит о ArrayList. Лямбдас требует, чтобы он догнал 3 обновления и целую кучу чтения. Потерянная причина, действительно. –

2

Как объяснено в dtb, вам, вероятно, следует использовать общий List<T>, чем нетипизированный ArrayList, если вы не используете версию 2.0 до 2.0.

Если вы действительно хотите сделать это с ArrayList, есть два способа сделать это:

  • если элементы коллекции реализации IComparable, просто использовать метод Sort без аргументов:

    arrayList.Sort(); 
    
  • в противном случае, вам нужно создать собственный компаратор путем реализации интерфейса IComparer:

    public class PersonComparer : IComparer 
    { 
        public int Compare(object a, object b) 
        { 
         Person pa = a as Person; 
         Person pb = b as Person; 
         if (pa == pb) return 0; 
         if (pa == null) return -1; 
         if (pb == null) return 1; 
         return string.Compare(pa.Name, pb.Name); 
        } 
    } 
    
    ... 
    
    arrayList.Sort(new PersonComparer()); 
    
0

Всякий раз, когда вы хотите отсортировать массив, вам необходимо сравнить его с определенным элементом. Предположим, у вас есть список массивов, называемый Клиент, а клиент имеет идентификатор клиента Теперь вы хотите его отсортировать. Ваш код должен быть

Client.Sort(a, b) => string.Compare(a.clientID.ToString(), b.clientID.ToString())); 
Смежные вопросы