在C#中更好地实现2D动态类数组容器
本文关键字:动态 数组 2D 实现 更好 | 更新日期: 2023-09-27 18:22:00
我必须为我的计算模型定义一个数据结构,作为2D数组。正如可以猜测的那样,首先关注的是初始化、迭代等方面的性能。对于上述要求,我有以下想法:
IList<IList<MyClass>>
和
IList<MyClass> [,]
我很容易知道上述两种选择之间的技术差异。此外,有人可能会试图说服我,以便在更好的选择中做出选择。。。
考虑到您实际上需要一个没有固定维度的映射,最好使用字典作为底层数据类型,这样您就不需要花太多时间考虑调整大小。
因此,您可以使用这样的结构:
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;
}
}
}
所以现在你可以像使用2d阵列一样使用它:
var map = new Map<string>();
map[88,33] = "foo";