Random

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
Weet iemand hoe je een random string kan laten uitkiezen uit een collectie? Niet op index maar echt op String omdat de collection steeds veranderd.
 
Laatst bewerkt:
Waarom niet op index? De collection heeft toch altijd een index? Dan kun je er toch random een uit pikken met een getal?
 
Omdat de collection veranderd zodra er een random item uitgekozen wordt. Dat item wordt dan verwijderd uit de collection zodat de volgende keer dat item niet nog eens gekozen kan worden.
 
Laatst bewerkt:
Wat JoZ1 al zegt.
Je kunt met het genereren van een random getal met als maximum het aantal items in de collectie een item uit de collectie ophalen.
 
Zo doe je het in C#:
PHP:
        private string RandomLetters(int Hoeveel)
        {
            Random r = new Random();
            string Letters = "qwertyuiopasdfghjklzxcvbnm";
            string L = "";
            for (int i = 0; i < Hoeveel; i++) L += Letters[r.Next(0, Letters.Length)];
            return L;
        }

Om dan het getal te laten variëren:
PHP:
        private string RandomLetters(int Hoeveel, string Letters)
        {
            Random r = new Random();
            string L = "";
            for (int i = 0; i < Hoeveel; i++) L += Letters[r.Next(0, Letters.Length)];
            return L;
        }

Converteren kan hier:
http://www.developerfusion.com/tools/convert/csharp-to-vb/

Succes =)

En ff uit m'n hoofd:

PHP:
Private Function RandomLetters(ByVal Hoeveel As Integer, ByVal Letters As String) As String
            Dim r As New Random()
            Dim s As String = ""
            For i As Integer = 0 To Hoeveel.Length - 1
 L += Letters(r.Next(0, Letters.Length))
Next
            Return L
        }
 
Laatst bewerkt:
@CaptainBri: Heel goede code :thumb:, maar het was toch de bedoeling dat uit een collection een string werd geselecteerd, of lees ik dat verkeerd? :eek:
 
uit een collectie

Lijkt me toch dat die collectie een char-array is aka een string, of misschien een list/string-array?

Random item uit een List;
PHP:
        private string Random(List<string> Lijst)
        {
            return Lijst[new Random().Next(0, Lijst.Count)];
        }

Random item uit een string array;
PHP:
        private string Random(string[] Lijst)
        {
            return Lijst[new Random().Next(0, Lijst.Count)];
        }

In VB.NET zou het iets van dit zijn:

String Array
PHP:
Private Function Random(ByVal Lijst() As String) As String
Return Lijst(New Random().Next(0, Lijst.Length))
End Function

List
PHP:
Private Function Random(ByVal Lijst As List(Of String)) As String
Return Lijst(New Random().Next(0, Lijst.Count))
End Function
 
Laatst bewerkt:
Ik dacht een list/string-array. Maar laten we wachten op een reactie van The Mighty Atom. :)
 
Heel tof, captain, maar helaas is dat niet wat ik zoek.

Stel, ik heb deze arraylist:

Code:
Dim List As ArrayList

En ik add tien strings:

Code:
List.AddRange({"blaat1", "blaat2", "blaat3", "blaat4", "blaat5", "blaat6", "blaat7", "blaat8", "blaat9", "blaat10"})

Vervolgens wil ik met Random een random string laten uitkiezen, en deze vervolgens uit de lijst verwijderen. Kiest de Random class bijvoorbeeld "blaat5", dan word deze uit de lijst verwijderd:

Code:
"blaat1", "blaat2", "blaat3", "blaat4", "blaat6", "blaat7", "blaat8", "blaat9", "blaat10"

Index based zal niet gaan omdat de collection (de arraylist) veranderd zodra er een item uit gehaald word.
 
Zo dan =)

Y8SsC.png


Resultaat:

DAf34.png


Code:
PHP:
        Dim List As New Collections.ArrayList
        List.AddRange(New String() {"blaat1", "blaat2", "blaat3", "blaat4", "blaat5", "blaat6", "blaat7", "blaat8", "blaat9", "blaat10"})
        Dim Item As Object = List(New Random().Next(0, List.Count))
        List.Remove(Item)
        'Of zo:
        'List.RemoveAt(List.IndexOf(Item))
        Console.WriteLine(Item)
        Console.Read()
 
Ben jij Pro ofo? :P
Dat is precies wat ik zoek. Dat ik daar zelf niet opgekomen ben, zo simpel. :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan