Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB.Net] Taulukon läpikäymisen järjestys

novice [18.04.2010 09:36:28]

#

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.

neau33 [18.04.2010 10:53:19]

#

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

Antti Laaksonen [18.04.2010 10:58:53]

#

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

novice [18.04.2010 11:33:26]

#

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

neau33 [18.04.2010 13:47:18]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta