【发布时间】:2015-11-16 15:37:03
【问题描述】:
我的目标是按组拆分 IEnumerable 的船只。 船舶群是彼此相距在 0.5 英里以内的船舶。
UPD:假设我们有一条河流,比如密西西比州。船只正在通过它漂浮。 我的目标是按他们的位置对他们进行分组。不是坐标而是英里(例如 19.3 英里),因此如果我们有一艘船在 19.3 英里处,而另一艘在 19.5 英里处,我们会将它们归为一组。但是,如果我们在 193 英里范围内还有另一艘船,我们就无法将它添加到我们刚刚分组的两艘船的组中。
ungroupedShips 在我们拥有的船舶集合中:(所有河流和地方) IEnumerable。
我想知道如何在查询中考虑里程比较?
var orderedShips = from ship in ungroupedShips
orderby string.Intern(ship.River), ship.MileMarker ascending
group ship by string.Intern(ship.River) into shipRiverGroup
select new BargeGroup { Ships = shipRiverGroup };
【问题讨论】:
-
什么是
ungroupedShip,它是数据库驱动的 LINQ 提供程序还是 Linq-To-Objects? -
你为什么使用
string.Intern? -
对于像这样的复杂任务来说,信息太少了。展示课程以及如何测量距离。
-
@TimSchmelter,我已经更新了详细信息。
-
“分组”的概念仅在您定义了等价类时适用。但是你的关系——两艘船彼此相距在 0.5 英里以内——是不传递的。您的关系定义了一个图,而不是一个分区。 (如果 A、B、C 在一条直线上,A 为 0,B 为 0.3,C 为 0.6,则 (A, B) 和 (B, C) 彼此相距在 0.5 英里范围内,但 (A, C)不是。)