2011-10-14 28 views
7

Bir 2B döngüsünün ilk dizisini geçmek için bir döngü yazdım ve şu an böyle bir şeye sahibim:VB.NET'te bir 2D dizisindeki her döngü için

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

Ancak bana ilk alanda bir ifade beklediğini söyleyerek bir hata veriyor. Ama yapmaya çalıştığım şey, ilk alandan geçiyor. Bunu nasıl düzeltirim? Oraya ne koyabilirim?

DÜZENLEME: açıklığa kavuşturmak için, özellikle her dizinin alt dizisindeki 0 öğesini arıyorum, bu yüzden ikinci alan sürekli 0

+0

Ben senin daha detaylı istek – JoshHetland

cevap

14

Bu döngüler için iç içe geçmiş olan

Not Bunun olabilir: bir dizi elemanları üzerinde ilerlerken her döngü için bir kullanırken, her yineleme oluşturulan tutucu gerçek dizi değerin bir kopyasıdır. Bu değerindeki değişiklikler orijinal diziye yansıtılmayacaktır. Bilgileri okumaktan başka bir şey yapmak isterseniz, doğrudan dizi elemanlarına hitap etmek için bir For döngüsü kullanmanız gerekecektir.

İki boyutlu bir dizi varsayarsak, aşağıdaki kod örneği, her boyuttaki her öğeye bir değer atayacaktır. Eğer Konrad Rudolph gibi pürüzlü dizide üzerinde döngü düşündüren edildi (Bu işlevsel daha yakından daha gevşek diğer dizi uygulamaları ile eşleşen istiyorsanız

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 

İsterseniz dinamik olarak her boyutta

tekrarlatacak .Rank özelliğini kullanabilirsiniz PHP gibi yazılan diller) bu kadar gibi bu konuda gidebiliriz:

'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

neden ben özellikle her dizinin alt dizisinde 0 eleman arıyorum netleştirmek için, bu. Çok boyutlu diziler, .NET framework altyapısında gerçekten desteklenmemektedir. Daha sonradan bir şekilde etiketlenmiş gibi görünüyorlar. En iyi çözüm genellikle bunları kullanmak değildir ve bunun yerine pürüzlü diziler kullanmaktır (diziler dizileri - Integer(,) yerine Integer()()).

+0

hesaba her iki örneklerini güncellenen 'ama yeniden Yani I) MasterIndex() (' bunu değiştirdik place 'Her Dir_path için MasterIndex (, 0)' ile Her Dir_path için MasterIndex() (0) '' İndeks sayısı dizinli dizinin boyutlarının sayısından az mıdır? – jayjyli

+1

@Tim Bu sözdizimi sadece geçersiz. MasterIndex'de Her x için… kullanın. DirPath = x (0) 've oradan çalışın… –

İlgili konular