latour_g 发表于 2017-6-29 09:57:28

双重比较

我想根据两个值对列表进行排序, 是否可以在我的类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 *****

gile 发表于 2017-6-29 10:11:27

稍后我可能有机会创建一个示例,但LINQ提供了一个您可以使用的示例。
https://msdn.microsoft.com/en-us/library/bb534743(v=vs.110)。aspx

latour_g 发表于 2017-6-29 10:57:53

嗨,您可以这样实现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);。

latour_g 发表于 2017-6-29 16:14:42

太好了,谢谢你们俩!
页: [1]
查看完整版本: 双重比较