Сортировать ArrayList, включая пользовательскую структуру - PullRequest
0 голосов
/ 25 июня 2011

Я написал структуру

public struct SeasonEpisodeNr { public int seasonNr; public int episodeNr; }

Во время моей программы я добавлю эти структуры в ArrayList. Как я могу их отсортировать? Я попробовал IComparer, но, к сожалению, я не смог понять, как он работает.

Ответы [ 3 ]

0 голосов
/ 25 июня 2011

Я не проверял это, но это что-то вроде ...

public struct SeasonEpisodeNr: IComparable
{ 
    public int seasonNr; 
    public int episodeNr;
    public int CompareTo(Object Item)
    {
        SeasonEpisodeNr that = (SeasonEpisodeNr) Item;

        if (this.seasonNr > that.seasonNr)
            return -1;
         if (this.seasonNr < that.seasonNr)
            return 1;

         if (this.episodeNr > that.episodeNr)
             return -1;
         if (this.episodeNr < that.episodeNr)
             return 1;

         return 0;
    }
0 голосов
/ 25 июня 2011
public struct SeasonEpisodeNr
{
    public SeasonEpisodeNr(int seasonNr, int episodeNr)
    {
        this.seasonNr = seasonNr;
        this.episodeNr = episodeNr;
    }

    public int seasonNr; public int episodeNr; 
}

static void Main(string[] args)
{
    List<SeasonEpisodeNr> list = new List<SeasonEpisodeNr>();
    list.Add(new SeasonEpisodeNr(1, 2));
    list.Add(new SeasonEpisodeNr(1, 1));
    list.Sort((a, b) =>
    {
        //implement comparison, e.g. compare season first and if equal compare the epizods
        int res = a.seasonNr.CompareTo(b.seasonNr);
        return res != 0 ? res : a.episodeNr.CompareTo(b.episodeNr);
    });
}
0 голосов
/ 25 июня 2011

Посмотрите пример по этой ссылке http://msdn.microsoft.com/en-us/library/8ehhxeaf.aspx

Основная идея

  • Создайте реализацию IComparer, которая возвращает -1 (меньше), 0 (равно) или 1 (больше) на основе ваших пользовательских критериев сравнения.
  • Затем передайте экземпляр этого класса методу Sort вашего List ()

Другой (немного длинноватый) пример , который иллюстрирует это

...