Làm cách nào để khai báo một mảng chuỗi hai chiều?


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

Tôi cần sắp xếp mảng 3x3 để lưu thông tin vào. Làm cách nào để khai báo điều này trong C #?


3
Các tài liệu rõ ràng cho thấy cách để làm điều đó: msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Esteban Araya


1
Lưu ý rằng có sự khác biệt giữa mã OP [] [] (cấu trúc mảng răng cưa) và câu trả lời được chấp nhận [,] (đa chiều), theo liên kết ở trên.
amalgamate

Câu trả lời:


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

Bạn cũng có thể khởi tạo nó trong cùng một dòng với cú pháp của trình khởi tạo mảng như sau:

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

2
Hoặc var tablero = new string[3,3];nếu bạn đang sử dụng C # 3 trở lên
bdukes 28/09/10

9
Nếu bạn sử dụng các mảng initializer cú pháp bạn không cần phải cung cấp giới hạn (ví dụ: bạn có thể chỉ cần ghi new string[,])
bdukes

2
Bạn không cần phải ghi new string[,]gì cả ...string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
Jim Balter

1
Để làm rõ rằng đầu tiên 3 trong [3, 3] là số lượng hàng, thứ hai 3 là số cột (tất cả mọi người dường như đã chọn [3, 3] chỉ để nhầm lẫn :-))
bytedev

54

Bạn có thể muốn điều này:

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

Điều này sẽ tạo cho bạn một mảng giống như ma trận trong đó tất cả các hàng có cùng độ dài.

Mảng trong mẫu của bạn được gọi là mảng răng cưa , tức là một mảng các mảng trong đó các phần tử có thể có kích thước khác nhau. Một mảng răng cưa sẽ phải được tạo theo một cách khác:

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

Bạn cũng có thể sử dụng trình khởi tạo để điền dữ liệu vào các phần tử mảng:

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

Và trong trường hợp một mảng răng cưa:

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

Bạn vừa khai báo một mảng răng cưa. Loại mảng như vậy có thể có các kích thước khác nhau cho tất cả các chiều. Ví dụ:

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

Trong trường hợp của bạn, bạn cần mảng thông thường. Xem câu trả lời ở trên. Thông tin thêm về mảng răng cưa


11

Tôi cho rằng bạn đang tìm kiếm điều này:

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

Cú pháp cho một mảng răng cưa là:

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

10

Có 2 loại mảng nhiều chiều trong C #, được gọi là MultidimensionalJagged.

Đối với đa chiều, bạn có thể:

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

Đối với mảng răng cưa, bạn phải viết thêm một đoạn mã:

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

Nói tóm lại mảng răng cưa vừa nhanh hơn vừa có cú pháp trực quan. Để biết thêm thông tin, hãy xem: câu hỏi về Stackoverflow này


3
Trong trường hợp lởm chởm bạn có thể khởi tạo nó trực tiếp như string[][] jagged = { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } }; hoặc var jagged = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
nawfal



6

string[][]không một mảng hai chiều, nó là một mảng của mảng (một mảng lởm chởm ). Đó là một cái gì đó khác nhau.

Để khai báo một mảng hai chiều, hãy sử dụng cú pháp sau:

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

Nếu bạn thực sự muốn một mảng răng cưa , bạn cần khởi tạo nó như sau:

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

6

Một mảng 3x3 (đa chiều) cũng có thể được khởi tạo (bạn đã khai báo) như thế này:

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


@JohnSaunders Tôi không thấy. Bỏ qua toàn bộ loại trên rhs là một cái gì đó khác nhau.
nawfal

1
Không, nó hoàn toàn giống nhau.
John Saunders

1
@JohnSaunders Tôi đã đề xuất một cách khác để khởi tạo. Không nhiều người biết rằng cô ấy có thể bỏ qua kích thước và thậm chí gõ trên rhs trong quá trình khởi tạo mảng. Tất nhiên nó cũng làm như vậy. Vì câu hỏi giống như "làm cách nào để khai báo / khởi tạo", đây cũng là một cách. Hãy xem câu trả lời này của Eric, trong đó anh ấy đề cập riêng đến từng kỹ thuật.
nawfal

2
Ồ được thôi. Tôi sẽ loại bỏ phiếu phản đối của mình, nhưng nó dường như đã biến mất.
John Saunders

6

Khi bạn đang cố gắng tạo một mảng nhiều chiều, tất cả những gì bạn cần làm là thêm dấu phẩy vào khai báo như sau:

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

3

bạn cũng có thể viết mã bên dưới.

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

trong đó 'i' là số hàng và 'j' là số cột. bằng cách sử dụng phương thức 'typeof (..)', bạn có thể chọn kiểu mảng của mình tức là int, string, double


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.