Как бы я отсортировал массив структур? - PullRequest
3 голосов
/ 11 марта 2009

У меня есть структура, содержащая данные песни:

public struct uLib
    {
        public string Path;
        public string Artist;
        public string Title;
        public string Album;
        public string Length;
    }  

Моя библиотека состоит из массива этого uLib. Как бы я отсортировал этот массив, скажем, Artist? Есть ли встроенная функция сортировки, которую я могу вызвать для этого типа массива, или мне придется «свернуть свою собственную»?

Ответы [ 4 ]

16 голосов
/ 11 марта 2009

Прежде всего, это не должно быть структурой. Он больше 16 байт, поэтому вы не получаете преимущества производительности при наличии структуры. Кроме того, он не представляет отдельное значение, поэтому семантически не имеет смысла делать его структурой. Просто сделайте это классом.

Класс Array имеет метод Sort, который вы можете использовать:

Array.Sort(theArray, (x,y) => string.Compare(x.Artist,y.Artist));

Если у вас нет C # 3, вы используете делегат вместо лямбда-выражения:

Array.Sort(theArray, delegate(uLib x, uLib y) { return string.Compare(x.Artist,y.Artist) } );

Edit:
Вот пример того, как ваши данные могут выглядеть как класс:

public class ULib {

    private string _path, _artist, _title, _album, _length;

    public string Path { get { return _path; } set { _path = value; } }
    public string Artist { get { return _artist; } set { _artist = value; } }
    public string Title { get { return _title; } set { _title = value; } }
    public string Album { get { return _album; } set { _album = value; } }
    public string Length { get { return _length; } set { _length = value; } }

    public ULib() {}

    public ULib(string path, string artist, string title, string album, string length) {
       Path = path;
       Artist = artist;
       Title = title;
       Album = album;
       Length = length;
    }

}

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

public string Path { get; set; }
1 голос
/ 11 марта 2009

от вас в порядке ULibArray от u.Artist выберите u;

0 голосов
/ 11 марта 2009

Не Сортировка массива элементов с использованием OrderBy <> ответь на свой вопрос?

С уважением Friedrich

0 голосов
/ 11 марта 2009

Предполагая, что uLibs является IEnumerable<T>, вы можете попробовать это:

uLibs.OrderBy(i => i.Artist)

Это сортирует uLib экземпляры, используя ключ; в этом случае вы выбрали Artist как ключ для сравнения. Подобная сортировка возможна и для других ваших полей.

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