Avatar billede flashit Nybegynder
07. november 2003 - 10:41 Der er 5 kommentarer og
1 løsning

omrokering af array

Hej E.
Jeg har denne fede kode:

Dim TestArray() As Integer = {"1", "2", "3", "4", "5"}
        Dim upperbound As Integer = TestArray.Length
        Dim random As New System.Random()
        Dim n As Integer
        For n = 0 To 4
            Dim index As Integer = random.Next(upperbound)
            lstArrayTest.Items.Add(TestArray(index))

        Next

Mit problem er bare at jeg gerne vil have byttet om på rækkefølgen af min ayyay, og ikke have det udskrevet tilfældigt.
Er her en som vil give et eks. på hvorledes dette kan udføres :-)
Avatar billede flashit Nybegynder
07. november 2003 - 10:47 #1
PS. jeg vil gerne have tallene i den nye rækkefølge placeret i et nyt array!!
Avatar billede arne_v Ekspert
07. november 2003 - 20:42 #2
Det kan nok gøres på mange måder.

Her er en:

Imports System
Imports System.Collections

Module Main
    Sub Main()
        Dim before() As Integer = { 1, 2, 3, 4, 5 }
        Dim rng As New System.Random()
        Dim beforetmp As ArrayList = new ArrayList(before)
        Dim aftertmp As ArrayList = new ArrayList()
        Dim n As Integer
        For n = 0 To (before.Length - 1)
            Dim index As Integer = rng.Next(beforetmp.Count)
            aftertmp.Add(beforetmp.Item(index))
            beforetmp.RemoveAt(index)
        Next
        Dim after(before.Length) As Integer
        For n = 0 To (before.Length - 1)
            after(n) = aftertmp.Item(n)
        Next
        For n = 0 To (before.Length - 1)
            Console.WriteLine(after(n))
        Next
    End Sub
End Module
Avatar billede arne_v Ekspert
07. november 2003 - 23:56 #3
Det kan kortes lidt ned:

Imports System
Imports System.Collections

Module Main
    Sub Main()
        Dim before() As Integer = { 1, 2, 3, 4, 5 }
        Dim rng As New System.Random()
        Dim tmp As ArrayList = new ArrayList(before)
        Dim after(before.Length) As Integer
        Dim n As Integer
        For n = 0 To (before.Length - 1)
            Dim index As Integer = rng.Next(tmp.Count)
            after(n) = tmp.Item(index)
            tmp.RemoveAt(index)
        Next
        For n = 0 To (before.Length - 1)
            Console.WriteLine(after(n))
        Next
    End Sub
End Module
Avatar billede flashit Nybegynder
08. november 2003 - 10:08 #4
Hej Arne_V

Først og fremmest mange tak for din hjælp.

Jeg har prøvet at beskrive hvad det er din kode gør linje for linje.

Imports System
Imports System.Collections

Module Main
    Sub Main()
        'Opretter et array(before) til at holde mine tal
        Dim before() As Integer = { 1, 2, 3, 4, 5 }
        'Opretter et random objekt
        Dim rng As New System.Random()
        'Opretter at array(tmp) som indeholder det samme som before arrayet
        Dim tmp As ArrayList = new ArrayList(before)
        'Opretter en variable som har samme værdig som antallet af tal i before arrayet
        Dim after(before.Length) As Integer
        'Opretter en tæller
        Dim n As Integer
        'kør koden igennem det samme antal gange som antal tal i before
        For n = 0 To (before.Length - 1)
            'dette fatter jeg ikke?????
            Dim index As Integer = rng.Next(tmp.Count)
            'placerer det aktive tal i after arrayet
            after(n) = tmp.Item(index)
            'fjerner tallet som er placeret i arrayet på den plads som index indeholder
            tmp.RemoveAt(index)
        Next
        'kør koden igennem det antal gange som before indeholder tal
        For n = 0 To (before.Length - 1)
            'udskriv after til cmd promten
            Console.WriteLine(after(n))
        Next
            'Denne funktion gør at cmd promten ikke lukker ned efter after er blevet udskrevet.
            console.readline
    End Sub
End Module


Er det rigtigt forstået?

Jeg fatter ikke denne linje:
Dim index As Integer = rng.Next(tmp.Count)

Vil du ikke lige kigge min beskrivelse igennem :-)
Avatar billede arne_v Ekspert
08. november 2003 - 11:03 #5
Imports System
Imports System.Collections

Module Main
    Sub Main()
        'Opretter et array(before) til at holde mine tal
        Dim before() As Integer = { 1, 2, 3, 4, 5 }
        'Opretter et objekt til at generere tilfældige tal
        Dim rng As New System.Random()
        'Opretter en array list (tmp) som indeholder det samme som before arrayet
        Dim tmp As ArrayList = new ArrayList(before)
        'Opretter en variable som har samme antal elementer som before arrayet
        Dim after(before.Length) As Integer
        'Opretter en tæller
        Dim n As Integer
        'kør koden igennem det samme antal gange som antal tal i before
        For n = 0 To (before.Length - 1)
            'find et tilfædigt element i tmp
            Dim index As Integer = rng.Next(tmp.Count)
            'flyt det element over i after
            after(n) = tmp.Item(index)
            'fjern elementet så det ikke kan vælges igen
            tmp.RemoveAt(index)
        Next
        'kør koden igennem det antal gange som before indeholder tal
        For n = 0 To (before.Length - 1)
            'udskriv after til cmd promten
            Console.WriteLine(after(n))
        Next
            'Denne funktion gør at cmd promten ikke lukker ned efter after er blevet udskrevet.
            console.readline
    End Sub
End Module
Avatar billede flashit Nybegynder
08. november 2003 - 13:02 #6
Perfekt MANGE TAK!!!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester