如何检查字典是否包含通用列表中的值

时间:2013-05-19 03:43:02

标签: c# foreach coordinates generic-list

我有一个存储在通用列表中的坐标列表。我希望能够遍历列表并检查是否有任何坐标彼此相邻。如果他们是,那么我知道它来自同一组,如果他们不是。有谁知道如何正确地做到这一点?

更新 到目前为止,这是我更新的代码。我正在将坐标分组到新的通用列表中,如果它们是相邻的并且也是相同的类型,则将它们添加到字典中。

现在我想知道Dictionary是否已包含组中的坐标。所以它不再运行相同的过程。如何访问字典中通用列表的值?

    private void groupMatchTile(List<int[]> matchTile){
        int i = 0;
        Dictionary<int, List<int[]>> groups = new Dictionary<int, List<int[]>>();

        foreach(int[] coord in matchTile){
            if(groups.ContainsValue(

            // How do you check if the coords already belong in a group

            )) return;

            groups.Add(i, new List<int[]>());   
            groups[i].Add(coord);

            foreach(int[] nextCoord in matchTile){
                if (coord == nextCoord) return;
                else {
                    if (    isAdjacent(coord[0], coord[1], nextCoord[0], nextCoord[1]) &&
                            level.grid[coord[0], coord[1]] == level.grid[nextCoord[0], nextCoord[1]]
                    ){
                        groups[i].Add(nextCoord);   
                    }
                }
            }

            i++;
        }   
    }

1 个答案:

答案 0 :(得分:0)

您可能需要更好的数据结构来避免O(n^2)搜索。也许2D阵列?从当前列表构建它所需的工作可能是值得的。

您还需要跟踪每个点的组ID。这是因为您的isAdjacent函数不会为您提供传递性,即如果三个点仅在x方向上相差1个单位,则您希望它们位于同一组中,但isAdjacent (p1, p3)将为{{ 1}}。

然后你的逻辑就像

false