2017-12-09 6 views
1

매우 큰 3D 그리드가 필요합니다. 간단히 3D 배열 (예 : T[,,])을 만들면 그 그리드에서 사용하지 않은 (3D) 위치가 많이 생겨날 것입니다. 메모리 사용으로 인해 그리드가 얼마나 큰지 멀리 떨어져있을 것입니다 .C# - 3D 배열의 3D 배열

그래서 제 생각에는 각 위치에 하위 3D 그리드가 포함 된 하위 3D 그리드 (일명 청크)의 "속이 빈"3D 그리드를 만드는 것입니다. 비어있는 청크의 경우 해당 청크의 3D 배열은 부모 3D 그리드에 없습니다. 청크가 들어있는 "최상위 수준"그리드는 그 위치 청크에 대한 참조를 포함하는 3 차원 배열이 될 것입니다 T[,,][,,]

가, 또는 덩어리가 비어 null의 경우 :

그래서 나는 유형의 값이 .

제 질문은 : T[,,][,,] 유형의 값을 초기화하는 방법은 무엇입니까? 내가 예를 들어 new T[3,3,3][3,3,3]을 할 경우, 컴파일러는 소리입니다 :

CS0178 Invalid rank specifier: expected ',' or ']' 

감사합니다. 이것은 당신에게 null 값의 3 차원 배열을 제공

T[,,][,,] a = new T[3,3,3][,,]; 

다음과 같이

답변

4

새로운 배열을 생성하는 구문이다. - 예를 들어, 키 등의 Dictionary 세 요소 튜플을 만들 수

a[1,2,2] = new T[8,8,8]; 

당신은 당신의 3D 그리드의 "덩어리"를 저장하기위한 다른 대안을 고려할 수있다 : 필요에 따라 null이 아닌 3 차원 배열로 설정할 수 있습니다 및 3D 배열을 값으로 사용합니다. This Q&A describes other available alternatives for implementing 3D matrices in C#.

+0

감사합니다. 구문이 필요합니다. 사전 접근 방식을 고려해 보겠습니다. – Virus721