C#按特定参数排序对象数组

Guy*_*uyZ 0 c# arrays sorting

我对编程比较陌生.我有一个对象数组,不一定是完整的(可能包括空行).我想通过其中一个类参数"int moveScore"对其进行排序.这是我的数组(目前只有32个条目)

Score[] firstPlyScore = new Score[1000];
Run Code Online (Sandbox Code Playgroud)

我尝试了两件事来进行分类

1 在"Score"类中,我继承了"IComparable"并使用了"CompareTo"方法,如下所示

public int CompareTo(object obj)
        {
            Score x = (Score)obj;

            if (this.moveScore < x.moveScore)
                return -1;

            if (this.moveScore > x.moveScore)
                return 1;

            return 0;
        }
Run Code Online (Sandbox Code Playgroud)

我叫它用;

Array.Sort(firstPlyScore);
Run Code Online (Sandbox Code Playgroud)

问题是它确实排序正确,但在数组的末尾.含义行0-966为"null",967-999正确排序(967具有最高"int",999具有最低值).有没有什么办法解决这一问题.

2 我也尝试过这个

Array.Sort(firstPlyScore, delegate
    (Score x, Score y) { return x.moveScore.CompareTo(y.moveScore); });
Run Code Online (Sandbox Code Playgroud)

这里的问题是它在达到"空"行时崩溃了.

最感谢!

Mik*_*bel 5

默认比较行为是null在非null值之前排序的值.如果要覆盖此行为,则Comparison<Score>可以使用第二个示例中的自定义.

delegate (Score x, Score y) {
    if (x == null)
        return y == null ? 0 : 1;
    if (y == null)
        return -1;
    return x.moveScore.CompareTo(y.moveScore);
}
Run Code Online (Sandbox Code Playgroud)

这会将null项目保留在数组的末尾.

要按降序排序,只需交换最后一行中的xy引用.