与布尔
问题描述:
排序自定义列表有一类与布尔
public class Camera
{
...
public bool live;
...
}
这是排序类
public class CameraSortByLive : IComparer<Camera>
{
private bool asc;
public CameraSortByLive(bool a)
{
this.asc = a;
}
public int Compare(Camera x, Camera y)
{
if (x.live != y.live)
return asc ? 0 : 1;
else
return asc ? 1 : 0;
}
}
这是我如何使用它:
List<Camera> CameraList = new List<Camera>();
CameraList.Sort(new CameraSortByLive(sortAsc));
现在,我身边live
会员我有其他会员int
,string
类型。对于这些类型,我有类似的排序类实现IComparer
。他们没有问题。这是live
成员唯一的问题。它根本没有排序。我希望它能够在列表顶部或底部,但它会在中间的某个位置。我错过了什么?
答
问题与您的比较功能。您应该声明一些命令,如假<为真或<为假。在你的函数中,有时候是真的<错误,有时候错误的<是真的。
答
public int Compare(Camera x, Camera y)
{
return (asc && x.live) ? 1 : 0;
}
你的代码的问题是你不能确定列表元素相互比较的顺序。所以,你在比较两个凸轮,如果他们的live
成员是等于你首先考虑的是不是第二个“更大”。所以,如果你的第一凸轮已经是“死”和第二个是“活”的,第一仍然较大。这绝对不是你想要的。
有了这个代码,如果左凸轮是活的 - 它被认为是比对时,无论正确的生活价值。由于我们不关心其他功能分类,我们真的不在乎的活凸轮“内部”命令(即所有活凸轮被视为相等,以及认为是平等的太所有deadcams)
+0
相同的结果。对不起 – Pablo 2013-03-17 16:04:56
真的:)它解决了,谢谢。 – Pablo 2013-03-17 16:10:40