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