Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0158: Zufällige Reihenfolgen generieren

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Algorithmen

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Sort,unsort,list,ilist,shuffle

Der Vorschlag wurde erstellt am: 16.12.2007 10:09.
Die letzte Aktualisierung erfolgte am 25.01.2009 12:53.

Zurück zur Übersicht

Beschreibung  

Die Methode "Shuffle" stellt in einer Auflistung eine zufällige Reihenfolge her.
Indem der Algorithmus auf das IList-Interface angewendet wird, können Arrays beliebiger DatenTypes, List(Of T) und einige weitere Auflistungsarten bedient werden können.
Anmerkung: Die Random-klasse generiert natürlich nur Pseudo-Zufalls-Zahlen, die einem Algorithmus folgen, der eine natürliche Zufalls-Verteilung nachahmt.
Der Shuffle-Methode ist eine Übertragung dieses C#-Codes

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [8,61 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ------------- Anfang Projektgruppe Unsort.sln  -------------
' ------------ Anfang Projektdatei Unsort.vbproj  ------------
' ----------------- Anfang Datei modMain.vb  -----------------
' Projekteinstellungen:
' Option Explicit On
' Option Strict On
' Imports System
' Imports Microsoft.VisualBasic.ControlChars

Imports System.Collections

Public Module modMain

    Public Sub Main()

        While True

            ' Ein String-Array erstellen
            Dim words As String() = "Das ist das Haus vom Ni ko laus.".Split(" "c)

            Console.WriteLine(String.Join(" "c, words))
            Shuffle(words)
            Console.WriteLine(String.Join(" "c, words) & Lf)
            Console.Write("Nochmal? [y] ")

            If Console.ReadKey.KeyChar <> "y"c Then Return
            Console.WriteLine(Lf)

        End While

    End Sub

    Private Sub Shuffle(ByVal lst As System.Collections.IList)

        Static rnd As New Random()

        For i As Integer = 1 To lst.Count - 1
            Swap(lst, i, rnd.Next(i + 1))
        Next

    End Sub

    Public Sub Swap(ByVal lst As IList, ByVal i1 As Integer, ByVal i2 As Integer)

        Dim tmp As Object = lst(i1)

        lst(i1) = lst(i2)
        lst(i2) = tmp

    End Sub

End Module

' ------------------ Ende Datei modMain.vb  ------------------
' ------------- Ende Projektdatei Unsort.vbproj  -------------
' -------------- Ende Projektgruppe Unsort.sln  --------------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.