给我一个类型的3D地图,其长度和宽度均匀但深度是锯齿状的:
public class Map<T>
{
T[,][] map;
...
}
返回由2D区域定义的体积内存在的所有类型对象的1D数组以及该区域内所有深度的最佳方法是什么。例如,我可能有一个数组符号覆盖,如下所示:
public IEnumerable<T> this[Rectangle area]
{
get {...}
}
或只是
public IEnumerable<T> this[int x, int y, int width, int length]
{
get {...}
}
我老实说希望有一个快速的LINQ解决方案,但性能优于解决方案的视觉优雅。返回的展平数组中对象的顺序并不重要。如果有人对此有任何建议或经验,请分享您的智慧。
或者,如果我可以使用的其他数据结构可以执行我不知道的相同功能,我很乐意使用它。
如果我的问题不清楚,请询问更多详情。
答案 0 :(得分:2)
你在找这样的东西吗?
public IEnumerable<T> this[int left, int top, int width, int height]
{
get
{
return from x in Enumerable.Range(left, width)
from y in Enumerable.Range(top, height)
from i in this.map[x, y]
select i;
}
}
答案 1 :(得分:1)
这可能也有效(没有Linq)
public IEnumerable<T> this[int x, int y, int width, int length]
{
get
{
for (int i = 0; i < length; i++)
{
for (int j = 0; j < width; j++)
{
for (int k = 0; k < map[x + i, y + j].Length; k++)
{
yield return map[x + i, y + j][k];
}
}
}
}
}