문제
나는 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
임시 유형을 사용하려면)