Làm thế nào để bạn có được chiều rộng và chiều cao của một mảng đa chiều?


180

Tôi có một mảng được định nghĩa:

int [,] ary;
// ...
int nArea = ary.Length; // x*y or total area

Đây là tất cả tốt và tốt, nhưng tôi cần phải biết mảng này rộng bao nhiêu trong các kích thước xykích thước riêng lẻ. Cụ thể, ary.Lengthcó thể trả về 12 - nhưng điều đó có nghĩa là mảng 4 cao và 3 rộng, hay 6 cao và 2 rộng?

Làm thế nào tôi có thể lấy thông tin này?



Câu trả lời:


235

Bạn sử dụng Array.GetLpm với chỉ mục của thứ nguyên bạn muốn truy xuất.


104
.Rankcho số lượng kích thước. Trong trường hợp này là 2, .GetLength(0)cho số lượng hàng, .GetLength(1)cho số lượng cột.
Đại tá Panic

114

Sử dụng GetLdrops (), thay vì Độ dài.

int rowsOrHeight = ary.GetLength(0);
int colsOrWidth = ary.GetLength(1);

41
// Two-dimensional GetLength example.
int[,] two = new int[5, 10];
Console.WriteLine(two.GetLength(0)); // Writes 5
Console.WriteLine(two.GetLength(1)); // Writes 10

24

Một số bài viết khác bị nhầm lẫn về kích thước nào. Đây là một thử nghiệm NUNIT cho thấy cách các mảng 2D hoạt động trong C #

[Test]
public void ArraysAreRowMajor()
{
    var myArray = new int[2,3]
        {
            {1, 2, 3},
            {4, 5, 6}
        };

    int rows = myArray.GetLength(0);
    int columns = myArray.GetLength(1);
    Assert.AreEqual(2,rows);
    Assert.AreEqual(3,columns);
    Assert.AreEqual(1,myArray[0,0]);
    Assert.AreEqual(2,myArray[0,1]);
    Assert.AreEqual(3,myArray[0,2]);
    Assert.AreEqual(4,myArray[1,0]);
    Assert.AreEqual(5,myArray[1,1]);
    Assert.AreEqual(6,myArray[1,2]);
}


3

Bạn cũng có thể xem xét sử dụng chỉ mục của các thành phần cuối cùng trong mỗi thứ nguyên được chỉ định bằng cách sử dụng như sau;

int x = ary.GetUpperBound(0);
int y = ary.GetUpperBound(1);

Hãy nhớ rằng điều này nhận được giá trị của chỉ mục là dựa trên 0.

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.