2009-10-25 2 views
2

두 개 이상의 차원이있는 배열 개념에 대해 머리를 감싸는 데 어려움을 겪고 있습니다. 이유가 무엇인지, 어떻게 사용해야하는지, 그리고 어떻게 사용하는지 알아보십시오.3 개 이상의 차원 배열을 사용하는 이유는 무엇입니까?

예를 들어 다단계 배열에서 다음 데이터를 나타내는 방법은 무엇입니까?

성별 : 남성 | 여성
머리카락 색 : Blond | 갈색 머리 | 검정
눈 색깔 : 파랑 | 브라운 | 녹색 | 엷은 갈색

본능 나가도록 배열을 만들어야합니다 내게 말하고있다 :

string[,,] personAttributes = new string[2,3,4]

당신이 루프로 다음 루프없이 배열을 작성하고 얼마나 제시해주십시오. 개념 및 사용법에 대한 모든 확장은 높이 평가됩니다.

답변

8

나는 차원을 생각하지 않기 때문에 당신의 personAttributes 예를 만지지 않을거야 배열은 좋은 생각입니다. 3D는 말할 것도없고 (개인적으로는 구조체의 배열을 사용합니다).

그러나 다차원 배열은 어떤 종류의 직교 데이터 공간 (즉, 서로 독립적 인 여러 '선택 사항'이있는 경우)에 매우 유용합니다.

예를 들어, 10 회 테스트를 통해 20 명의 응답 시간을 저장하고 각 테스트가 3 번 반복되고 모든 것이 12 개월 동안 한 달에 한 번 수행되는 경우 다음과 같은 배열이있을 수 있습니다 :

double[,,,] responseTime = new double [12,20,10,3]; 
+1

참고, C#은 double [] [] [] [] arrayName 형식으로 선언 된 "들쭉날쭉 한"배열을 지원합니다. 예를 들어, 한 달에 다른 인원수를 가질 수 있고, 매월 사람마다 다른 수의 테스트를 수행 할 수 있습니다. 그러나 이러한 배열은 색인을 생성하는 속도가 느립니다. – Artelius

1

여러 차원을 갖는 데이터 구조를 모델링합니다. 체스 보드가 좋은 예이고, 1 차원은 순위에 대한 것이고, 다른 하나는 파일에 대한 것입니다.

예제 (성별, 눈 색깔, 머리카락 색)의 범주는 다른 범주와 관련이 없으므로 각 차원이 1 인 3 개의 다른 배열로 가장 잘 표현됩니다. 당신은 다중 차원 배열을 통해 루프를 원하는 경우

, 당신은 단순히 루프에서 루프를 사용 진부한 소리의 위험에서

for (int i = 0; i < array.length; i++) { 
    for (int j = 0; j < array[0].length; j++) { 
     string data = array[i][j]; 
     // do something with the data 
    } 
} 
+0

* 두 개 이상입니까? – Artelius

+0

2 개 이상? –

8

, 당신은 세 개 이상의 차원의 배열을 사용할 때를 3 개 이상의 데이터 차원을가집니다. 그래서 저는 여러분이 3 차원의 데이터를 구상하는 데 어려움을 겪고 있다고 생각합니다.

어때 대략 3-D Tic Tac Toe? 3 차원 데이터의 이산 표현은이 카테고리에 적합합니다.

헤어 컬러와 같은 속성에 대해서는이 용도로 다차원 배열을 사용하지 않습니다. 해당 개체 및 열거 형 개체 (예 : 열거 형 성별)가있는 개체를 적절하게 사용합니다. 그것은 이 될 것이며 N 차원 배열보다 더 읽기 쉽습니다..

+0

오른쪽, 진부하지 않습니다. – hplbsh

2

귀하의 예제에서 다차원 배열은 이해가되지 않습니다. 당신의 상황에 맞는 수업이 훨씬 더 의미가 있습니다. 당신이 갈 수있는 하나 개의 방법이 될 것입니다 멤버 변수로 저장 열거 식으로 뭔가 : 등

enum HAIRCOLORS { BROWN = 0, BLOND = 1 ..... }; 
enum SEX { FEMALE = 0, MALE = 1 }; 
enum EYECOLORS { GREEN, BLUE, RED .... }; 

class PersonAttributes 
{ 
    public SEX sex = SEX.Female; 
    public HAIRCOLORS hairColor = HAIRCOLORS.Brown; 
    public EYECOLORS eyeColor = EYECOLORS.Green; 
}; 

...

1

주소를 주소로 생각하는 것이 도움이 될 수 있습니다.이 예제를 사용하여 주 세인트 스프링 MA

(123)는, 내 첫 번째 배열 상태의 배열 될 것이다. 각 주마다 도시의 배열을 보유 할 것이고, 도시는 거리를 보유하고 결국 거리에는 개별 주소가 저장됩니다.

이 배열을 사용하면 모든 주소가 포함 된 메일 링리스트를 쉽게 만들 수 있습니다. 각 배열을 반복하면 모든 주소 나 필요한 작업을 인쇄 할 수 있습니다.

예제를 보면 다차원 배열이 적합하지 않습니다. 배열로 수행하고자하는 주요 작업이 여성/금발/파란 눈과 같은 데이터의 하위 집합을 찾는 경우가 아니면 나는 수업을 사용하라는 제안을 따를 것이다. 배열에서 사람 객체를 볼 때 그 특성을 파악하기 위해 그 사람을 가리키는 색인 값을 알아야합니다.

또 다른 유용한 예는 응용 프로그램에서 메시지의 국제화입니다. 배열은 언어, 상태 (오류, 경고, 정보), 메시지 ID (배열 메시지 문자열) 일 수 있습니다.

배열을 채우는 데는 데이터가 정렬 된 경우 루프 만 사용하면됩니다. 그렇지 않으면 입력 데이터를 구문 분석하여 적절한 색인을 식별하십시오.

+0

이상하게도 아빠는 예를 들어 주소에 매우 가까이에서 일 하셨다. 진실한 이야기. –

0

다른 사람들이 쓴 것처럼 당신의 예제는 3D 배열에 적합하지 않습니다. 귀하의 예제는 2D 데이터 구조에 더 적합한 것처럼 보입니다. 하나의 색인은 사람이며, 다른 색인은 성별, 머리 색, 눈 색깔입니다. 또는 다른 데이터 구조를 사용할 수도 있습니다 ...

3D 배열의 간단한 예제입니다. (압축되지 않은) 검정색 & 흰색 디지털 무비 저장하는 것을 고려하십시오. 각 프레임은 강도 값을 갖는 2D 이미지 X와 Y입니다 : image (i, j). 이제 영화를 여러 프레임으로 만들려면 동영상을 이미지 (i, j, k)로 저장할 수 있습니다. 여기서 k는 시간이 지남에 따라 변경됩니다. 동영상이 컬러 인 경우 cimages (i, j, q, k), q = 1,2,3의 세 가지 기본 색상을 저장하고 네 번째 배열을 갖는 네 번째 차원을 추가 할 수 있습니다.

관련 문제