我有一个存储在通用列表中的坐标列表。我希望能够遍历列表并检查是否有任何坐标彼此相邻。如果他们是,那么我知道它来自同一组,如果他们不是。有谁知道如何正确地做到这一点?
更新 到目前为止,这是我更新的代码。我正在将坐标分组到新的通用列表中,如果它们是相邻的并且也是相同的类型,则将它们添加到字典中。
现在我想知道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++;
}
}
答案 0 :(得分:0)
您可能需要更好的数据结构来避免O(n^2)
搜索。也许2D阵列?从当前列表构建它所需的工作可能是值得的。
您还需要跟踪每个点的组ID。这是因为您的isAdjacent
函数不会为您提供传递性,即如果三个点仅在x
方向上相差1个单位,则您希望它们位于同一组中,但isAdjacent (p1, p3)
将为{{ 1}}。
然后你的逻辑就像
false