Как отсортировать массив объектов в Visual C #? - PullRequest
0 голосов
/ 28 ноября 2009

У меня есть объект, который имеет два члена, которые оба являются целочисленными значениями.Я сделал массив этих объектов.Значения каждого объекта заполнены случайными целыми числами.

Я хочу отсортировать массив объектов по первому значению члена.Как бы я это сделал?

Ответы [ 3 ]

6 голосов
/ 28 ноября 2009

Вы используете .NET 3.5? Если это так, это так же просто, как:

array = array.OrderBy(x => x.MemberName).ToArray();

Это создаст новый массив, хотя - если любой другой код имеет ссылку на старый массив, он все равно увидит несортированные данные.

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

  • Заставьте ваш тип реализовать IComparable<T>, позволяющий объекту сравнивать себя с другим
  • Создать экземпляр IComparer<T>, который может сравнивать любые два объекта этого типа
  • Создание делегата типа Comparison<T>, который может сравнивать любые два объекта этого типа

Последнее, вероятно, самое простое решение, если вы используете C # 3:

Array.Sort(array, (x1, x2) => x1.MemberName.CompareTo(x2.MemberName));
1 голос
/ 28 ноября 2009

Вы должны сначала реализовать IComparable в классе. Это должно помочь:
Сортировать ArrayList объектов
Как использовать интерфейсы IComparable и IComparer в Visual C #

0 голосов
/ 28 ноября 2009
class Program
{
    class Foo
    {
        public int FirstMemberValue { get; set; }
    }

    static void Main(string[] args)
    {
        var foos = new[] 
        { 
            new Foo { FirstMemberValue = 1 }, 
            new Foo { FirstMemberValue = 3 }, 
            new Foo { FirstMemberValue = 2 } 
        };
        Array.Sort(foos, (f1, f2) => f1.FirstMemberValue.CompareTo(f2.FirstMemberValue));
        foreach (var item in foos)
        {
            Console.WriteLine(item.FirstMemberValue);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...