用于比较嵌套数组的 LINQ 表达式
LINQ expression to compare nested arrays
我有一个线列表,一条线由一组 LatLngs (latitude/longitudes) 组成,因此,这就是列表的表示方式。
IEnumerable<LatLng[]> lineNetwork;
我正在尝试计算 return 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);
您可能应该为 LatLng 类型定义相等性,我假设它是一个结构。
你的查询应该是这样的
var connectedLines = lineNetwork.Where( line => line.Any( coord => givenLine.Contains( coord ) ) );
在这里,我假设给定正确的相等性实现 Contains()
将 return 为真。
假设 LatLng
是相等的你可以使用 Intersect
var result = lineNetwork.Where (n => n.Intersect(givenLine).Any())
由于Intersect
在内部使用哈希表进行查找,因此性能会非常好。
我有一个线列表,一条线由一组 LatLngs (latitude/longitudes) 组成,因此,这就是列表的表示方式。
IEnumerable<LatLng[]> lineNetwork;
我正在尝试计算 return 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);
您可能应该为 LatLng 类型定义相等性,我假设它是一个结构。
你的查询应该是这样的
var connectedLines = lineNetwork.Where( line => line.Any( coord => givenLine.Contains( coord ) ) );
在这里,我假设给定正确的相等性实现 Contains()
将 return 为真。
假设 LatLng
是相等的你可以使用 Intersect
var result = lineNetwork.Where (n => n.Intersect(givenLine).Any())
由于Intersect
在内部使用哈希表进行查找,因此性能会非常好。