2

我正在研究一个存储类的二维数组的类MyType,并希望它使用动态数据类型。即不是MyType[,]

问题MyType[,]是该类不提前知道数组的大小,如果在 .NET Frameworks 的其他地方已经完成,我不想麻烦管理数组的大小调整。

该类在任何给定时刻都不知道最大数组大小,但数组将是密集的。我知道我可以使用静态数组,并根据需要重新分配内存,但如果可能的话,我更喜欢使用内置实现。

有什么比List<List<MyType>>这个目的更好的吗?

编辑1:指定数组是密集的;

编辑 2 和 3:指定问题MyType[,]

4

3 回答 3

4

创建自己的List<List<T>>封装,如:

public class Matrix<T>
{
   List<List<T>> matrix;

   public void Add(IEnumerable<T> row)
   {
      List<T> newRow = new List<T>(row);
      matrix.Add(newRow);
   }

   public T this[int x, int y]
   {
      get  { return matrix[y][x]; }
   }
   ....
}

定义你自己的一套操作就可以了!自由!

通过封装它,如果还不够,您可以决定稍后再进行更优化的实现。

        ICollection<T> rowOne = (ICollection<T>)new List<Int64>();
        rowOne.Add(1);
        rowOneList.Add(2);
        rowOne.Add(3);

        ICollection<T> rowTwo = (ICollection<T>)new List<Int64>();
        rowTwo .Add(4);
        rowTwo .Add(5);
        rowTwo .Add(6);
于 2009-02-09T09:41:54.480 回答
1

这取决于你的结构有多稀疏。例如,如果您的条目类似于myTypes[0, 1]and myTypes[134, 544],则最好使用sparse matrix。否则,List<List<MyType>>会做。

于 2009-02-09T09:40:44.437 回答
1

对于密集的二维矩阵,矩形阵列是理想的。你有什么问题SomeType[,]?请注意,您可以使用Array.CreateInstance(type, dim0Size, dim1Size)或使用泛型创建动态数组:

void DoWork<T>(...) {
   T[,] data = ...
}
DoWork<Foo>(...);
DoWork<Bar>(...);

MakeGenericMethod如果你想使用 ad-hoc 类型,可能会使用)

于 2009-02-09T09:52:09.480 回答