zufälliges Ergebnis anhand Prozentangaben berechnen

  • Lang lang ist's her, meine letzte Frage hier. Guten Tag, ich hab mal wieder ein Problem, folgendes möchte ich erreichen:

    Ich habe eine Tabelle mit den Ergebnissen und den Prozentangaben:

    Lua
    local rnd = {
    	["Kohle"] = 50,
    	["Eisen"] = 30,
    	["Redstone"] = 10,
    	["Gold"] = 5,
    	["Diamant"] = 5,
    }


    Nun möchte ich ein zufälliges Ergebnis anhand dieser Prozentzahlen ermitteln, sprich Kohle sollte zu ca. 50% erscheinen. Gesagt getan, habe ich mir ein kleines Script gebastelt:

    Getestet habe ich es mit 1 Millionen Durchläufen. Dies gibt aber relativ willkürliche Werte aus - kein Wunder, da ich das erstbeste Ergebnis returne und einen Fallback-Wert brauche (die "Kohle"), falls mal nichts in der Schleife zurückgegeben wird. Somit kann ich die Prozentangaben sehr einfach manipulieren, indem ich die Anordnung in der Tabelle ändere. Fail also.
    Nun aber mein zweiter Versuch, der sehr genaue Ergebnisse liefert:


    Dazu zu sagen ist, dass die erste Schleife vom Prinzip her nicht weggelassen werden kann, wenn man die Tabelle nicht unleserlich schreiben will (Sprich Kohle = 50, Dia = 10, das bedeutet in der Tabelle Kohle = 50, Dia = 60, da ich ja unten die Zahlen der vorherigen mit der jetzigen Tabellenspalte vergleiche). PS: Es hilft auch ungemein die Schleife auf "i=1, 1" zu setzen und alle outputChatBox wieder einzuklammern, um die Funktionsweise zu sehen.

    Aber warum erstelle ich dieses Thema, wenn meine Schleife doch funktioniert? Erstens ist der Code relativ lang und unübersichtlich, zweitens brauche ich zwei For-Schleifen, die das ganze auch nicht performanter gestalten. Hat also irgendjemand eine Funktion parat, die eine Tabelle (am besten wie die meine) nimmt und mir dann einen zufälligen Wert gibt?

  • Dieses Thema enthält 4 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!