LINQ выражение для сравнения вложенных массивов - PullRequest
0 голосов
/ 21 мая 2018

У меня есть список строк, строка состоит из массива LatLngs (широта / долгота), поэтому, как представлен список.

IEnumerable<LatLng[]> lineNetwork;

Я пытаюсь разобратьсявыражение LINQ, необходимое для возврата всех строк в lineNetwork, которые связаны с givenLine.Для подключения они должны иметь широту и долготу, равные широте и долготе в 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 голосов
/ 21 мая 2018

Предполагая, что LatLng является равноправным, вы можете использовать Intersect

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

Поскольку Intersect использует внутреннюю хеш-таблицу для поиска, это даст очень хорошую производительность.

0 голосов
/ 21 мая 2018

Вы, вероятно, должны определить равенство для типа LatLng, который, я предполагаю, является структурой.

Ваш запрос будет выглядеть примерно так:

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

Здесь я предполагаю, что при правильной реализации равенства Contains() вернет истину.

...