2

I'm working on a class that is storing a 2D array of class MyType and would like it to use dynamic data types. i.e. not MyType[,]

The problem with MyType[,] is that the class doesn't know the size of the array ahead of time, and I don't want to go to the trouble of managing array re-sizing if it's been done elsewhere in the .NET Frameworks.

The class will not know maximum array size at any given moment, but the array will be dense. I know I can use static arrays, and re-allocate memory as needed, but I'd prefer to use a built-in implementation if possible.

Is there anything better than List<List<MyType>> for this purpose?

編集 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

高密度の2Dマトリックスの場合、長方形の配列が理想的です。あなたが抱えている問題は何SomeType[,]ですか?Array.CreateInstance(type, dim0Size, dim1Size)、またはジェネリックを使用して動的配列を作成できることに注意してください。

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

MakeGenericMethod(アドホックタイプを使用する場合は、おそらく使用します)

于 2009-02-09T09:52:09.480 に答える
1

構造がどれだけまばらになるかによって異なります。たとえば、エントリが と のようになる場合は、myTypes[0, 1]sparse matrixmyTypes[134, 544]を使用する方がはるかに優れています。そうでなければ、そうします。List<List<MyType>>

于 2009-02-09T09:40:44.437 に答える