2017-02-07 2 views
0

У меня есть список списков списков [k] (несколько списков).Поиск по списку Array

Я хочу выполнить поиск, если переменная PointF из списка [k] равна любому из элементов списков. ИСКЛЮЧАЕТ список, в который входит эта переменная PointF.

Что-то вроде поиска по спискам k + 1, k + 2, k + n и k-1, k-2, k-n, кроме k.

for (int k = 0; k < drone.Length; k++) 
{ 
    for (int i = 0; i <= 10; i++) 
    { 
     for (int j = 0; j <= 10; j++) 
     { 
      list[k].Add(new PointF(i,j)); 
     } 
    } 

    // now I want to search if a variable PointF 
    // from a list[k] is equals to any of the elements 
    // of the lists except the list where that variable PointF comes from 
} 
+0

Вы хотите найти конкретную точку или вы хотите определить, есть ли какая-либо точка в любом списке, который также существует в другом списке? –

+0

Я беру элемент из списка, и я хочу сравнить этот элемент со всеми элементами всех списков, за исключением списка, из которого пришел этот элемент. –

+0

Итак, вы знаете 'k'? И разве это опечатка, а 'drone' -' list' или есть какая-то другая магия в 'drone'? –

ответ

0

Если вы знаете k (индекс списка, где ваша точка пришла с), вы можете сделать это с помощью этой небольшой реализации Linq:

private bool PointExistsInAnotherList(List<PointF>[] lists, int k, PointF p) 
{ 
    return Enumerable.Range(0, lists.Length) 
        .Where(i => i != k) 
        .Any(i => lists[i].Any(point => point.Equals(p))); 

} 

Проверяется для всех списков, кроме lists[k], если какой-либо из точки в этом списке равны заданной точке p. Если найдена совпадающая точка, она немедленно возвращает true.


Если вы хотите узнать индекс списка, который содержит точку соответствия, вы можете сделать это:

private int PointExistsInAnotherList(List<PointF>[] lists, int k, PointF p) 
{ 
    for (int i=0; i<lists.Length; i++) 
    { 
     if (i == k) continue; 
     if (lists[i].Any(point => point.Equals(p)) return i;         
    } 

    return -1; 
} 

Это возвращает индекс (i) из первого списка, который содержит точку равным p, или -1, если соответствующая точка не найдена.

+0

Я попробую этот подход. Я отвечу в ближайшее время. thx –

+0

Вы там? –

+0

Вы знаете, как вместо того, чтобы возвращать bool. Я хотел вернуть список k, который был найден? –

Смежные вопросы