vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Variablen/Strings · Array/ArrayList   |   VB-Versionen: VB2005, VB200831.01.11
Array zufällig mischen

Es werden zwei Funktionen gezeigt, die es ermöglichen, die Elemente eines gegebenen Arrays nach dem Zufallsprinzip zu mischen.

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  10.029 
ohne HomepageSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Ein Array sortieren - dafür gibt es ja bekanntermaßen einen Befehl. Aber ich brauchte für einen bestimmten Zweck immer mal wieder ein Array, dessen Elemente zufällig durchmischt sein sollten. Daraus sind zwei Funktionen entstanden, die folgendermaßen arbeiten:

Die Funktion getRndArrayMix erstellt ein Ergebnisarray, dessen Elemente zufällig angeordnet sind. Dabei verwendet sie die Funktion GetRndIndizes, die zunächst nur ein temporäres Feld erzeugt, das als Elemente nur zufällig angeordnete Indizes beinhaltet. Dieses Feld wird dann in der ersten Funktion benutzt, um die Elemente des Ausgangsfeldes ins Ergebnisfeld einzuordnen.

1. Funktion

''' <summary>
''' Erzeugen eines zufälligen Mix der Arrayelemente
''' </summary>
''' <param name="theArray">das zu verarbeitende Array (Source-Feld)</param>
Public Function getRndArrayMix(ByVal theArray As Array) As Array
  ' Feld mit zufällig verteilten Indizes erstellen
  Dim rndNum() As Integer = GetRndIndizes(theArray.Length)
 
  Dim temp(rndNum.Length - 1) As Object
  ' Temporäres Feld mit den zufällig verteilten Werten 
  ' des Source-Felds erstellen
  For i As Integer = 0 To theArray.Length - 1
    temp.SetValue(theArray(i), rndNum(i))
  Next
 
  Return temp ' Rückgabe des gemischten Felds
End Function

2. Funktion

''' <summary>
''' Erzeugen eines Index-Array mit Zufallszahlen ohne Duplikate
''' </summary>
''' <param name="theArrayLen">Länge des zu mischenden Arrays</param>
Public Function GetRndIndizes(ByVal theArrayLen As Integer) As Integer()
  Dim rndIndizes(theArrayLen - 1) As Integer
  Dim i, idRnd As Integer
 
  ' Initialisieren des Feldes der zufällig verteilten Indizes
  For i = 0 To theArrayLen - 1
    rndIndizes(i) = -1
  Next
 
  Randomize()
  ' Einspeichern von Indizes in zufälliger Reihenfolge
  For i = 0 To theArrayLen - 1
    Do
      ' Zufallszahl im Bereich (0...größter Index des Source-Feldes) erzeugen
      idRnd = (theArrayLen - 1) * Rnd()
      ' Ist Zufallszahl schon im Feld der Indizes?
      If Array.IndexOf(rndIndizes, idRnd) < 0 Then
        rndIndizes(i) = idRnd
        Exit Do
      End If
    Loop
  Next
  Return rndIndizes
End Function

Aufruf:

Dim ergebnisRandomField() as object= getRndArrayMix(sourceArray)

Beispiel:
Ein String-Array mit Namen soll willkürlich gemischt in einer ListBox angezeigt werden:

Dim sourceArray() = {"Hans", "Michael", "Dieter", "Anton", _
  "Felix", "Guido", "Stefan", "Roland", "Günther", "Rainer"}
 
Dim ergebnisRandomField() As Object = getRndArrayMix(sourceArray)
ListBox1.DataSource = ergebnisRandomField

Dieser Tipp wurde bereits 10.029 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel