문제

나는 2D 배열의 클래스를 저장하는 수업에서 일하고 있습니다. MyType 동적 데이터 유형을 사용하고 싶습니다. 즉 MyType[,]

문제 MyType[,] 클래스는 배열의 크기를 미리 알지 못하고 .NET Frameworks의 다른 곳에서 수행 된 경우 배열 재조정을 관리하는 데 어려움을 겪고 싶지 않습니다.

클래스는 주어진 순간에 최대 배열 크기를 알지 못하지만 배열은 조밀합니다. 정적 배열을 사용할 수 있고 필요에 따라 메모리를 다시 할 수 있지만 가능한 경우 내장 구현을 선호합니다.

더 나은 것이 있습니까? List<List<MyType>> 이 목적을 위해?

편집 1 : 배열이 밀도가 높음을 지정했습니다.

2 및 3 편집 : 지정된 문제 MyType[,]

도움이 되었습니까?

해결책

직접 만들어 봐 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]; }
   }
   ....
}

그것에 대해 자신의 작업 세트를 정의하십시오! Freee!

이를 캡슐화함으로써 충분하지 않은 경우 나중에보다 최적화 된 구현을하기로 결정할 수 있습니다.

        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);

다른 팁

그것은 당신의 구조가 얼마나 희소 할 것인지에 달려 있습니다. 예를 들어, 항목이 myTypes[0, 1] 그리고 myTypes[134, 544], 당신은 사용하는 것이 훨씬 더 좋을 것입니다 드문 매트릭스. 그렇지 않으면, List<List<MyType>> 할 것입니다.

밀도가 높은 2D 매트릭스의 경우 직사각형 배열이 이상적입니다. 당신이 가지고있는 문제는 무엇입니까? SomeType[,]? 동적 배열을 만들 수 있습니다 Array.CreateInstance(type, dim0Size, dim1Size), 또는 제네릭과 함께 :

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

(아마도 사용 MakeGenericMethod 임시 유형을 사용하려면)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top