2012-04-17 3 views
4

다차원 가드를 만들어야합니다. X, Y, Z 세 개의 값을 나열하고 값을 쿼리하면 배열을 제거해야하기 때문에 목록이 필요합니다.다차원 목록 C#

쿼리는 다음과 같이 나타납니다. 목록 [0] [0] = X, 목록 [0] [a] = Y 및 목록 [0] [2] = X 0 그리고 그는 이미 다른 모든 세를 제거합니다.

답변

4

다차원 목록을 작성해야하는 경우, 당신은 항상 같은 목록의 목록을 만들 수 있습니다 : 그 할당의 방식으로 존재하지 않는 값을 대체하려고 시도하지만

var multiDimensionalList = new List<List<string>>{ 
    new List<string>{"A","B","C"}, 
    new List<string>{"D","E","F"}, 
    new List<string>{"G","H","I"}, 
}; 
Console.WriteLine(multiDimensionalList[2][1]); // Prints H 

multiDimensionalList[2].RemoveAt(1); 
Console.WriteLine(multiDimensionalList[2][1]); // Prints I 

multiDimensionalList[2][1] = "Q"; 
Console.WriteLine(multiDimensionalList[2][1]); // Prints Q 

인식됩니다

multiDimensionalList[2][5] = "R"; // Throws an ArgumentOutOfRangeException 
0

귀하의 질문은 이해하기가 어렵지만 찾고자하는 것이 배열 배열을 사용하여 수행 할 수 있습니까? 어쨌든 다차원 배열이 어떤 언어로 구현되는 방식입니다.

귀하의 경우 목록 목록 : 목록>을 사용 중일 수 있습니다. 그리고 이것은 외부 목록 <> 개체의 첫 번째 요소를 제거하여 "다른 모든 세 가지"를 제거하라는 요구 사항을 충족시킵니다.

+0

목록과 같은 배열 배열이지만 인덱스 목록을 사용하는 것이 더 쉽습니다. 목록 –

+0

질문이나 의견입니까? 어느 쪽이든 나는 이해하지 못한다 ... –

0

죄송합니다. 귀하의 질문은 이해하기가 조금 어렵지만, 나는 그것에 찔러 보겠습니다. 배열 및 목록이라는 단어는 C#에서 아직 다른 개념이므로 서로 바꾸지 마십시오. 나는 당신이 [] 대괄호를 사용하여 Array를 의미한다고 믿습니다. 요소를 사용하여 목록에서 특정 요소를 제거하는 좋은 방법이 있으므로 목록을 사용하는 것이 좋습니다. MSDN에는 진행 방법에 대한 좋은 정보가 있습니다. List(T).Remove method

목록은 원하는대로 요소를 제거하거나 추가하기 위해 자체 구조를 재구성합니다.

0

당신이 Z을 두 번째 인덱서로 문자열과 정수를 모두 사용하여, 두 번 X를 참조하지만,하지 않는 한 나는 당신의 논리를 다음입니다 확실하지 않다 : 예외를 throw합니다. 이것들이 오타라고 가정하면, 나는 당신이 원하는 것을 추측 할 것입니다.

는 당신에게 당신이 설명하는 동작주고 X, Y, 그리고 Z 속성, 인덱서와 사용자 정의 유형을 고려 유무 : 당신은 또한 당신의 값은 어떤 종류의 언급하지 않는

를, 그래서 내가 사용하고 object하지만, 자신의 유형을 자유롭게 바꿔 (또는 제네릭 형식)

public class MyType 
{ 
    private object[] backingArray = new object[3]; 
    public object this[int index] 
    { 
     get { return backingArray[index]; } 
     set { backingArray[index] = value; } 
    } 

    public object X 
    { 
     get { return backingArray[0]; } 
     set { backingArray[0] = value; } 
    } 
    public object Y 
    { 
     get { return backingArray[1]; } 
     set { backingArray[1] = value; } 
    } 
    public object Z 
    { 
     get { return backingArray[2]; } 
     set { backingArray[2] = value; } 
    } 
} 

당신은 다음과 같이 사용할 수 있습니다 :

List<MyType> list = new List<MyType>(); 
list = PopulateList(); // fill list with values 


var x = list[0][0]; 
var y = list[0][1]; 
var z = list[0][2]; 

물론이 구현은 항상 3 개의 요소로 구성된 2 차원에 따라 달라집니다. 그것이 일관성이 없다면 다른 대답들 중 하나가 당신의 필요에 풍부합니다.