Gleichmäßig-Zufällige Array Verteilung

  • C#
  • .NET (FX) 4.0

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hab mich wohl etwas flasch ausgedrückt: Das "int size" sollte außerhalb der Schleife. Außerdem hab ich kleine Korrekturen vorgenommen, das Math.Ceiling, damit als Minvalue nicht 0 kommt, und das If damit dein Fehler verschwindet. Ist nämlich blöd, wenn bei einem Array mit 30 Items von Index 28 dann 7 Items genommen werden ;)

    C#-Quellcode

    1. public static T[][] RandomSplitBlock<T>(T[] Input)
    2. {
    3. if (Input == null)
    4. throw new ArgumentNullException("Input can't be null.");
    5. Random rnd = new Random(DateTime.Now.Millisecond);
    6. var index = 0;
    7. var arrayBlocks = new List<T[]>();
    8. var size = rnd.Next((int)(Math.Ceiling(Input.Length * 0.1)), (int)(Math.Ceiling(Input.Length * 0.4)));
    9. while (index < Input.Length)
    10. {
    11. var c = rnd.Next((int)(Math.Ceiling(size - (size * 0.5))), (int)(size + (size * 0.5)));
    12. if (index + c > Input.Length)
    13. c = Input.Length - index;
    14. var newArr = new T[c];
    15. Array.Copy(Input, index, newArr, 0, c);
    16. arrayBlocks.Add(newArr);
    17. index += c;
    18. }
    19. return arrayBlocks.ToArray();
    20. }
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    Rikudo schrieb:

    die size variable muss außerhalb des loops
    Dein Problem ist, dass Du Dein ungelöstes Problem von innen heraus lösen möchtest, das funktioniert nicht. Deswegen konntest Du die Posts auch nicht korrekt umsetzen.
    Tritt einen Schritt zurück und betrachte zunächst das ganze von außen. Versuche, das Problem einem Spiegel oder Deinem Bildschirm zu erklären, mir hilft das.
    Wenn dann die "Hülle" klar ist, gehst Du nach innen und denkst über die Implementation nach. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!