2011-10-14 34 views
7

Tôi đang viết một vòng lặp để đi qua các mảng đầu tiên của một vòng lặp 2D, và tôi hiện đang có nó như thế này:Đối với mỗi vòng lặp trên mảng 2D trong VB.NET

For Each Dir_path In MasterIndex(, 0) 
    'do some stuff here 
Next 

Nhưng nó đem lại cho tôi một lỗi, nói rằng nó mong đợi một biểu thức trong trường đầu tiên. Nhưng đó là những gì tôi đang cố gắng làm, lặp qua trường đầu tiên. Làm thế nào để sửa lỗi này? Tôi sẽ đặt cái gì vào đó?

EDIT: để làm rõ, tôi đặc biệt tìm kiếm các yếu tố 0 trong mảng con của mỗi mảng, đó là lý do mà trường thứ hai là liên tục 0.

+0

tôi cập nhật cả hai ví dụ để giải thích cho yêu cầu chi tiết của bạn – JoshHetland

Trả lời

14

Bạn có thể thực hiện điều này với lồng nhau Ví vòng

Lưu ý: Khi sử dụng lệnh For Each vòng lặp để lặp qua các yếu tố trong một mảng, giữ chỗ tạo ra trên mỗi lần lặp là một bản sao của giá trị trong mảng thực tế. Các thay đổi đối với giá trị đó sẽ không được phản ánh trong mảng ban đầu. Nếu bạn muốn làm bất cứ điều gì khác hơn là đọc thông tin bạn sẽ cần phải sử dụng vòng lặp For để xử lý trực tiếp các phần tử mảng.

Giả sử mảng hai chiều, ví dụ mã sau sẽ gán giá trị cho từng phần tử trong mỗi thứ nguyên.

Dim MasterIndex(5, 2) As String 

For iOuter As Integer = MasterIndex.GetLowerBound(0) To MasterIndex.GetUpperBound(0) 
    'iOuter represents the first dimension 
    For iInner As Integer = MasterIndex.GetLowerBound(1) To MasterIndex.GetUpperBound(1) 
    'iInner represents the second dimension 
    MasterIndex(iOuter, iInner) = "This Isn't Nothing" 'Set the value 
    Next 'iInner 

    'If you are only interested in the first element you don't need the inner loop 
    MasterIndex(iOuter, 0) = "This is the first element in the second dimension" 
Next 'iOuter 
'MasterIndex is now filled completely 

Bạn tùy chọn có thể sử dụng .Rank tài sản để tự động lặp qua mỗi chiều

Nếu bạn muốn để lặp qua một mảng lởm chởm như Konrad Rudolph đã được gợi ý (Đây chức năng phù hợp chặt chẽ hơn nữa việc triển khai mảng trong khác lỏng lẻo hơn ngôn ngữ đánh máy như PHP), bạn có thể đi về nó như vậy:

'This is a jagged array (array of arrays) populated with three arrays each with three elements 
Dim JaggedIndex()() As String = { 
    New String() {"1", "2", "3"}, 
    New String() {"1", "2", "3"}, 
    New String() {"1", "2", "3"} 
} 

For Each aOuter As String() In JaggedIndex 
    'If you are only interested in the first element you don't need the inner for each loop 
    Dim sDesiredValue As String = aOuter(0) 'This is the first element in the inner array (second dimension) 

    For Each sElement As String In aOuter 
    Dim sCatch As String = sElement 'Assign the value of each element in the inner array to sCatch 
    sElement = "This Won't Stick" 'This will only hold value within the context of this loop iteration 
    Next 'sElement 
Next 'aOuter 
'JaggedIndex is still the same as when it was declared 
1

Bạn chỉ đơn giản là không thể. Mảng đa chiều không thực sự được hỗ trợ trong cơ sở hạ tầng khung .NET. Họ dường như được gắn thẻ như là một suy nghĩ. Giải pháp tốt nhất thường không sử dụng chúng, và sử dụng các mảng răng cưa thay thế (mảng mảng - Integer()() thay vì Integer(,)).

+0

vì vậy, tôi đã thay đổi nó cho 'MasterIndex()()' nhưng khi tôi lại đặt 'Đối với mỗi Dir_path Trong MasterIndex (, 0)' với 'Đối với mỗi Dir_path Trong MasterIndex() (0)' Tôi nhận được 'Số chỉ mục nhỏ hơn số thứ nguyên của mảng được lập chỉ mục'? – jayjyli

+1

@Tim Cú pháp đó đơn giản là không hợp lệ. Sử dụng 'Đối với mỗi x trong MasterIndex ... DirPath = x (0)' và làm việc từ đó ... –

Các vấn đề liên quan