Stellen einer Zahl "randomisieren"

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Stellen einer Zahl "randomisieren"

    Guten Abend,
    nehmen wir an ich habe eine 50-stellige Zahl:
    12345678901234567890123456789012345678901234567890

    Gibt es eine Möglichkeit sämtliche Stellen "zufällig" zu vertauschen?

    Mit freundlichen Grüßen,
    Leviathan_


    Edit:
    Es müssen nicht alle Stellen vertauscht werden und es sollte kein Algorhytmus sein.
    Entweder Linq (Einzeiler, such mal im Forum) oder per Schleife alle Elemente aus dem Char Array über einen zufälligen Index rausnehmen und einem neuen String anhängen. Die zufällig ausgewählten Elemente dann aus dem array entfernen.
    Das ist meine Signatur und sie wird wunderbar sein!

    Mono schrieb:

    Entweder Linq (Einzeiler, such mal im Forum) oder per Schleife alle Elemente aus dem Char Array über einen zufälligen Index rausnehmen und einem neuen String anhängen. Die zufällig ausgewählten Elemente dann aus dem array entfernen.
    Hmm... ich finde unter Linq leider nichts passendes.
    Das Char Array wäre eine Möglichkeit, aber würde es lieber mit Linq (Einzeiler?) versuchen.

    LG,
    Leviathan_
    wie hast du es denn angewendet? Und bist du dir sicher, dass die andere Methode schneller ist? Ich glaube kaum, da dies auf ca. dasselbe hinausläuft...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    wie hast du es denn angewendet? Und bist du dir sicher, dass die andere Methode schneller ist? Ich glaube kaum, da dies auf ca. dasselbe hinausläuft...
    Ausprobiert noch nicht... aber ich hatte nicht vor 5000 Zeilen in einem ListView zu haben...
    Nur leider weiß ich nicht wie ich mit dem Char Array anfangen soll.
    EDIT: Google hilft da auch nicht.
    es wurde alles gesagt, ich habe nie behauptet, dass du diese zeichen einer ListView hinzufügen sollst, du sollst den dortigen Code verstehen und vorallem das LinQ, das könntest du dann entsprechend abändern, dass es mit einem String als Input funktioniert.,..
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    es wurde alles gesagt, ich habe nie behauptet, dass du diese zeichen einer ListView hinzufügen sollst, du sollst den dortigen Code verstehen und vorallem das LinQ, das könntest du dann entsprechend abändern, dass es mit einem String als Input funktioniert.,..

    Dafür muss ich aber sicher vorher ein Char Array anlegen - welches ich nicht kann - und Google findet auch nichts..
    Ich würde es so machen:

    VB.NET-Quellcode

    1. Dim str As String = "12345678901234567890123456789012345678901234567890"
    2. Dim r As New Random
    3. Dim newstr As Char() = (From a As Char In str Order By r.Next(str.Length) Take str.Length).ToArray
    4. Debug.Print(newstr)


    /EDIT

    mal im Zeitvergleich 2 Methoden:

    VB.NET-Quellcode

    1. Dim str As String = "12345678901234567890123456789012345678901234567890"
    2. Dim r As New Random
    3. Dim sw As New Stopwatch
    4. Debug.Print(str)
    5. sw.Start()
    6. Dim newstr As Char() = (From a As Char In str Order By r.Next(str.Length) Take str.Length).ToArray
    7. sw.Stop()
    8. Debug.Print(newstr & " sortiert nach " & sw.Elapsed.ToString)
    9. sw.Reset()
    10. Dim newloopStr As String = String.Empty
    11. Dim curInd As Integer
    12. sw.Start()
    13. For a As Integer = 0 To str.Length - 1
    14. curInd = r.Next(str.Length)
    15. newloopStr &= str(curInd)
    16. str = str.Remove(curInd, 1)
    17. Next
    18. sw.Stop()
    19. Debug.Print(newloopStr & " sortiert nach " & sw.Elapsed.ToString)


    Ausgabe
    50879059354063911280371656627817882429035374244619 sortiert nach 00:00:00.0080929
    24802124482680451968670949055167331795137260593837 sortiert nach 00:00:00.0000391
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()

    strenggenommen gilt: String = CharArray
    String.ToCharArray() gibt dir dann jedoch einen Char Array ohne Stringfunktionen...wirst du aber wahrscheinlich auch nicht einmal benötigen...
    (es gäbe sogar noch die Möglichkeit über einen IComparer - mit Zufall - und Array.Sort(...))

    Edit: C&P ;(
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---