C# 如何检查字典是否在泛型列表中包含值

C# 如何检查字典是否在泛型列表中包含值,c#,foreach,coordinates,generic-list,C#,Foreach,Coordinates,Generic List,我有一个存储在通用列表中的坐标列表。我希望能够遍历列表并检查是否有任何坐标彼此相邻。如果他们是,那么我知道他们来自同一组,如果他们不是。有人知道如何正确地做到这一点吗 更新: 这是我到目前为止更新的代码。我将坐标分组到一个新的通用列表中,如果它们相邻且类型相同,则将它们添加到字典中 现在我想知道字典是否已经包含组中的坐标。所以它不再运行相同的进程。如何访问字典中通用列表的值 private void groupMatchTile(List<int[]> matchTile){

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

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

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

    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++;
        }   
    }
private void groupMatchTile(列出matchTile){
int i=0;
字典组=新字典();
foreach(匹配块中的int[]坐标){
if(groups.ContainsValue)(
//如何检查coords是否已经属于某个组
))返回;
添加(i,新列表());
组[i]。添加(坐标);
foreach(匹配块中的int[]下一个命令){
if(coord==nextcord)返回;
否则{
if(相邻(坐标[0]、坐标[1]、下一个坐标[0]、下一个坐标[1])&&
level.grid[coord[0],coord[1]]==level.grid[nextcord[0],nextcord[1]]
){
组[i]。添加(下一个命令);
}
}
}
i++;
}   
}

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

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

那么你的逻辑应该是

if (isAdjacent (point1, point2)) {
    point1.groupID = point2.groupID = min (point1.groupID, point2.groupID)
}

很难理解您的代码。有太多的对象对我们来说是未定义的。你的代码有什么问题?你需要给我们更多的信息。描述一下你目前的情况。实际上我现在正在做这件事。我想我已经掌握了解决这个问题的要点。我会更新这篇文章,一旦我得到一点进一步。谢谢你的来信。