Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包含自定义结构的排序ArrayList_C#_Sorting_Struct_Arraylist_Icomparer - Fatal编程技术网

C# 包含自定义结构的排序ArrayList

C# 包含自定义结构的排序ArrayList,c#,sorting,struct,arraylist,icomparer,C#,Sorting,Struct,Arraylist,Icomparer,我写了一个结构 公共结构季节性插曲 { 公共卫生署署长; 公共int插曲; } 在我的程序中,我会将这些结构添加到ArrayList中。我怎样才能把它们分类?我尝试了IComparer,但不幸的是我无法理解它是如何工作的。查看此链接中的示例 基本思想是 创建一个IComparer实现,该实现根据自定义比较条件返回-1小于、0等于或1大于。 接下来,将此类的一个实例传递给列表的Sort方法 这说明了这一点我没有测试这个,但它有点像 public struct SeasonEpisodeNr: I

我写了一个结构

公共结构季节性插曲 { 公共卫生署署长; 公共int插曲; }


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

查看此链接中的示例

基本思想是

创建一个IComparer实现,该实现根据自定义比较条件返回-1小于、0等于或1大于。 接下来,将此类的一个实例传递给列表的Sort方法
这说明了这一点

我没有测试这个,但它有点像

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;
    }

小心可变结构。
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);
    });
}