Onko VB:ssa valmista funktiota tai yleisesti hyväksi koettua keinoa käydä taulukko järjestyksessä läpi muutoin kuin alusta loppuun tai takaperin lopusta alkuun? esim. tässä tapauksessa etuperin viimeisestä alkiosta toiseksiviimeiseen alkioon.
NO MORJENS novice!
If Taulukko.Length > 1 Then 'viimeisestä alkiosta toiseksiviimeiseen For i As Integer = Taulukko.GetUpperbound(0) _ To Taulukko.GetUpperbound(0) - 1 Step -1 MsgBox(Taulukko(i).ToString) Next 'toiseksiviimeisestä alkiosta viimeiseen For i As Integer = Taulukko.GetUpperbound(0) - 1 To Taulukko.GetUpperbound(0) MsgBox(Taulukko(i).ToString) Next 'Edit: jos Antin epäilys osui oikeaan niin... 'elikä ensimmäisenä viimeinen ja sitten alusta 'toiseksiviimeiseen alkioon... For i As Integer _ = Taulukko.GetLowerBound(0) _ To Taulukko.GetUpperBound(0) Dim j As Integer = Math.Abs(Math.Abs( _ (i - (Taulukko.GetUpperBound(0) * 2)) Mod _ Taulukko.GetUpperBound(0)) _ - Taulukko.GetUpperBound(0)) If i > 0 Then j -= 1 MsgBox(Taulukko(j).ToString) Next End If
Vai oliko tarkoitus pyörähtää ympäri taulukon lopusta?
Dim taulu() As Integer = {1, 2, 3, 4, 5} ' aloituskohta Dim alku As Integer = UBound(taulu) ' lopetuskohta Dim loppu As Integer = UBound(taulu) - 1 ' 1 = eteenpäin, -1 = taaksepäin Dim askel As Integer = 1 Dim kohta As Integer = alku Do MsgBox(taulu(kohta)) If kohta = loppu Then Exit Do kohta = kohta + askel If kohta = -1 Then kohta = UBound(taulu) If kohta = UBound(taulu) + 1 Then kohta = 0 Loop
Antti Laaksonen kirjoitti:
Vai oliko tarkoitus pyörähtää ympäri taulukon lopusta?
Kyllä. Samankaltaisen ratkaisun kehittelin itsekin, mutta ajattelin vaan, että olisiko siihen yksikertaisempaa alla olevan kaltaista ratkaisua...
For Each Item In Taulu StartItem = 3 Next
NO MORJENS taas novice!
tässä pikku funkkari...
Function ListFromItem(_Array As Object, sItem As Integer) As Collection Dim _Collection As New Collection If sItem > 0 Then For i As Integer = sItem To _Array.GetUpperBound(0) _Collection.Add(_Array(i)) Next For i As Integer = _Array.GetLowerBound(0) To sItem -1 _Collection.Add(_Array(i)) Next Else For i As Integer = _Array.GetLowerBound(0) _ To _Array.GetUpperBound(0) _Collection.Add(_Array(i)) Next End If Return _Collection: _Collection = Nothing End Function Sub Button1Click(sender As Object, e As EventArgs) 'Testi Dim Taulukko(5) As Object For i As Integer = Taulukko.GetLowerBound(0) _ To Taulukko.GetUpperBound(0) Taulukko(i) = i Next For Each Item In ListFromItem(Taulukko, 2) MsgBox(item.ToString) Next End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.