0

我写了一个结构

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

在我的程序中,我会将这些结构添加到 ArrayList。我怎样才能对它们进行排序?我尝试了 IComparer,但不幸的是我无法理解它是如何工作的。

4

3 回答 3

0
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);
    });
}
于 2011-06-25T14:58:40.083 回答
0

查看此链接中的示例 http://msdn.microsoft.com/en-us/library/8ehhxeaf.aspx

基本思想是

  • 创建一个 IComparer 实现,该实现根据您的自定义比较条件返回 -1(小于)、0(等于)或 1(大于)。
  • 接下来将此类的一个实例传递给 List() 的 Sort 方法

另一个(有点冗长的)示例说明了这一点

于 2011-06-25T14:53:32.613 回答
0

我没有测试这个,但它就像......

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;
    }
于 2011-06-25T14:56:28.693 回答