搜索列表数组

时间:2017-02-07 12:09:58

标签: c# list

我有一系列列表[k](多个列表)。

我想搜索列表[k]中的变量PointF是否等于列表中的任何元素,除了该变量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
}

1 个答案:

答案 0 :(得分: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