我必须为我的计算模型定义一个数据结构,作为2D数组。可以猜测,首先要关注的是初始化,迭代等方面的性能。 我对以上要求有以下想法:
IList<IList<MyClass>>
和
IList<MyClass> [,]
我很容易知道两个提到的选项之间的技术差异。此外,有人可能试图说服我,以便选择更好的...
答案 0 :(得分:1)
鉴于您实际上需要没有固定维度的地图,最好使用词典作为基础数据类型,这样您就不必花太多时间考虑调整大小。
因此你可以使用这样的结构:
class Map<T>
{
Dictionary<int, Dictionary<int, T>> map =
new Dictionary<int, Dictionary<int, T>>();
public T this[int row,int column]
{
get {
Dictionary<int, T> rowDic;
if(!map.TryGetValue(row,out rowDic))
{
return default(T);
}
T val;
if(!rowDic.TryGetValue(column, out val))
{
return default(T);
}
return val;
}
set {
Dictionary<int, T> rowDic;
if(!map.TryGetValue(row,out rowDic))
{
map[row] = new Dictionary<int, T>();
}
map[row][column] = value;
}
}
}
所以现在你可以像二维数组一样使用它:
var map = new Map<string>();
map[88,33] = "foo";