用于比较嵌套数组的LINQ表达式

时间:2018-05-21 08:56:19

标签: c# arrays linq ienumerable

我有一个行列表,一行包含一个LatLng数组(纬度/经度),因此,这就是列表的表示方式。

IEnumerable<LatLng[]> lineNetwork;

我正在尝试计算返回lineNetwork中连接到givenLine的所有行所需的LINQ表达式。要连接,他们的纬度和经度必须等于givenLine中的纬度和经度。

LatLng[] givenLine = 
{ 
    new LatLng(Latitude: 0.1, Longitude: 0.1),
    new LatLng(Latitude: 0.2, Longitude: 0.2),
    new LatLng(Latitude: 0.3, Longitude: 0.3)
}

IEnumerable<LatLng[]> connectedLines = lineNetwork.LINQEXPRESSIONRETURNSCONNECTEDLINES(givenLine);

2 个答案:

答案 0 :(得分:3)

你可能应该为LatLng类型定义相等,我假设它是一个结构。

您的查询将类似于

var connectedLines = lineNetwork.Where( line => line.Any( coord => givenLine.Contains( coord ) ) );

在这里,我假设给出正确的等式实现Contains()将返回true。

答案 1 :(得分:2)

假设LatLng是等同的,您可以使用Intersect

var result = lineNetwork.Where (n => n.Intersect(givenLine).Any())

由于Intersect在内部使用哈希表进行查找,因此会产生非常好的性能。