我对编程比较陌生.我有一个对象数组,不一定是完整的(可能包括空行).我想通过其中一个类参数"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)
这里的问题是它在达到"空"行时崩溃了.
最感谢!
默认比较行为是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项目保留在数组的末尾.
要按降序排序,只需交换最后一行中的x和y引用.
| 归档时间: |
|
| 查看次数: |
2398 次 |
| 最近记录: |