2 차원 문자열 배열을 어떻게 선언 할 수 있습니까?


79
string[][] Tablero = new string[3][3];

정보를 저장하려면 3x3 배열이 필요합니다. 이것을 C #으로 어떻게 선언합니까?


3
문서는 방법을 명확하게 보여줍니다. msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Esteban Araya


1
위의 링크에 따라 OP 코드 [] [] (지그재그 배열 구조)와 허용 된 대답 [,] (다차원)간에 차이가 있습니다.
amalgamate

답변:


110
string[,] Tablero = new string[3,3];

다음과 같이 배열 이니셜 라이저 구문을 사용하여 동일한 행에서 인스턴스화 할 수도 있습니다.

string[,] Tablero = new string[3, 3] {{"a","b","c"},
                                      {"d","e","f"}, 
                                      {"g","h","i"} };

2
또는 var tablero = new string[3,3];C # 3 이상을 사용하는 경우
bdukes

9
배열 이니셜 라이저 구문을 사용하는 경우 경계를 제공 할 필요가 없습니다 (예 : 작성 가능 new string[,])
bdukes

2
당신은 작성할 필요가 없습니다 new string[,]... 전혀string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
짐 Balter에게

3
명확하게하기 위해 [3, 3]의 처음 3 개는 행 수이고, 두 번째 3 개는 열의 수입니다 (모두 혼동하기 위해 [3, 3]을 선택한 것 같습니다 :-))
bytedev

54

아마도 이것을 원할 것입니다.

string[,] Tablero = new string[3,3];

이렇게하면 모든 행의 길이가 같은 행렬과 같은 배열이 생성됩니다.

샘플의 배열은 소위 들쭉날쭉 한 배열입니다 . 즉, 요소의 크기가 다를 수있는 배열의 배열입니다. 들쭉날쭉 한 배열은 다른 방법으로 만들어야합니다.

string[][] Tablero = new string[3][];
for (int i = 0; i < Tablero.GetLength(0); i++)
{
    Tablero[i] = new string[3];
}

이니셜 라이저를 사용하여 배열 요소를 데이터로 채울 수도 있습니다.

string[,] Tablero = new string[,]
{
    {"1.1","1.2", "1.3"},
    {"2.1","2.2", "2.3"},
    {"3.1", "3.2", "3.3"}
};

그리고 들쭉날쭉 한 배열의 경우 :

string[][] Tablero = new string[][]
{
    new string[] {"1.1","1.2", "1.3"},
    new string[] {"2.1","2.2", "2.3"},
    new string[] {"3.1", "3.2", "3.3"}
};

15

방금 들쭉날쭉 한 배열을 선언했습니다. 이러한 종류의 배열은 모든 차원에 대해 다른 크기를 가질 수 있습니다. 예를 들면 :

string[][] jaggedStrings =  {
new string[] {"x","y","z"},
new string[] {"x","y"},
new string[] {"x"}
};

귀하의 경우에는 일반 배열이 필요합니다. 위의 답변을 참조하십시오. 들쭉날쭉 한 배열에 대한 추가 정보


11

나는 당신이 이것을 찾고 있다고 가정합니다.

        string[,] Tablero = new string[3,3];

가변 배열의 구문은 다음과 같습니다.

        string[][] Tablero = new string[3][];
        for (int ix = 0; ix < 3; ++ix) {
            Tablero[ix] = new string[3];
        }

10

C #에는 Multidimensional및 라는 두 가지 유형의 다차원 배열이 Jagged있습니다.

다차원의 경우 다음을 수행 할 수 있습니다.

string [,] multi = 새 문자열 [3, 3];

들쭉날쭉 한 배열의 경우 약간 더 많은 코드를 작성해야합니다.

string[][] jagged = new string[3][];
            for (int i = 0; i < jagged.Length; i++)
            {
                jagged[i] = new string[3];
            }

짧게 들쭉날쭉 한 배열은 더 빠르고 직관적 인 구문을 가지고 있습니다. 자세한 내용은 이 Stackoverflow 질문을 참조하세요.


3
들쭉날쭉 한 경우에는 직접처럼 초기화 할 수 있습니다 string[][] jagged = { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } }; 또는 var jagged = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
nawfal



6

string[][]없는 2 차원 어레이, 그 배열의 배열 (a있어 지그재그 배열 ). 그것은 다른 것입니다.

2 차원 배열을 선언하려면 다음 구문을 사용하십시오.

string[,] tablero = new string[3, 3];

정말 들쭉날쭉 한 배열을 원한다면 다음과 같이 초기화해야합니다.

string[][] tablero = new string[][] { new string[3], 
                                      new string[3], 
                                      new string[3] };

6

3x3 (다차원) 배열도 다음과 같이 초기화 할 수 있습니다 (이미 선언 했음).

string[,] Tablero =  {
                        { "a", "b", "c" },
                        { "d", "e", "f" }, 
                        { "g", "h", "i"} 
                     };


@JohnSaunders 나는 보지 못했습니다. rhs에서 전체 유형을 무시하는 것은 다른 것입니다.
nawfal

1
아니, 똑같아.
John Saunders

1
@JohnSaunders 초기화하는 다른 방법을 제안했습니다. 그녀가 배열 초기화 중에 크기를 생략하고 rhs에 입력 할 수 있다는 것을 아는 사람은 많지 않습니다. 물론 동일합니다. 질문이 "어떻게 선언 / 초기화합니까"에 가깝기 때문에 이것도 한 가지 방법입니다. 그가 각 기술을 별도로 언급하는 이 Eric의 대답 을 참조하십시오 .
nawfal 2013 년

2
오 그래. 내 반대표를 없앨 수 있지만 이미 사라진 것 같습니다.
John Saunders

6

다차원 배열을 만들려고 할 때 다음과 같이 선언에 쉼표를 추가하기 만하면됩니다.

string[,] tablero = new string[3,3].

3

아래 코드를 작성할 수도 있습니다.

Array lbl_array = Array.CreateInstance(typeof(string), i, j);

여기서 'i'는 행 수이고 'j'는 열 수입니다. 'typeof (..)'메소드를 사용하여 배열 유형 (예 : int, string, double)을 선택할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.