双重比较
我想根据两个值对列表进行排序, 是否可以在我的类BlkFleche中添加另一个比较?我需要列表基于X进行排序,然后基于Y,这些都是来自坐标的。 因此,如果我有这样的X和Y:,我希望最终结果是:我使用列表,因为我需要保留与坐标相关的数据。public class blkFleche : IComparable。{。
公共双精度位置 X { get; set; }。
公共双位置Y { get; set; }。
public string attNOCABLE { get; set; }。
public string attNOFIBRE { get; set; }。
。
public int CompareTo(blkFleche other)。
{。
返回 this.positionX.CompareTo(other.positionX);。
}。
}。
。
private void btnRead()。
{。
List listBlkSort = new List();。
//...。
blkFleche blkNew = new blkFleche();。
//...。
blkNew.positionX = blkRef.Position.X;。
blkNew.positionY = blkRef.Position.Y;。
//...。
listBlkSort.Add(blkNew);。
//...。
listBlkSort.Sort();。
}。
**** Hidden Message ***** 稍后我可能有机会创建一个示例,但LINQ提供了一个您可以使用的示例。
https://msdn.microsoft.com/en-us/library/bb534743(v=vs.110)。aspx
嗨,您可以这样实现I comparable : public class blkFleche:I comparable。
{。
public double positionX { get设置;}。
public double positionY { get设置;}。
公共字符串attNOCABLE { get设置;}。
公共字符串attNOFIBRE { get设置;}。
。
public int compare to(blk file che other)。
{。
int compareX = this . positionx . compare to(other . positionx);。
return compareX == 0?this . positiony . compare to(other . positiony):compareX;。
}。
}但正如Jeff所说,可以直接使用linq扩展方法: ListList blk = new List ();。
。
//填充listBlk。
。
列表。
,order by(blk = > blk . positionx)。
,然后By(blk => blk.positionY)。
,to list();或者,更有效的方法是,如果您不绝对需要List : IEnumerablelistBlkSort = List blk 。
,order by(blk = > blk . positionx)。
,then by(blk = > blk . positiony);。
太好了,谢谢你们俩!
页:
[1]