Hey Community,
Ich stehe vor einem Problem bei dem ich nicht weiß wie ich es am besten umsetzen soll
Zuerst, was habe ich vor :
Ich möchte ein T[] in mehrere kleine arrays unterteilen (mit random größen) und dann ein T[][] zurückgeben, also
ein array welches die einzelnen kleineren arrays enthält.
Wichtig ist das die Arrays schön ihre Reihenfolge behalten.
Das konnte ich so umsetzen: (Dickes dankeschön an @~blaze~ )
Zum Problem.
Der obrige algorithmus funktioniert recht gut, was ich jedoch möchte ist eine etwas gleichmäßigere, trotzdem random(!) verteilung
der einzelnen arrayblöcke.
Bei 30 Array Items als input kommen often solche Ergebnisse :
z.B. unterteilt in 4 kleinere arrays, wobei:
array[0] = enthält 23 items
array[1] = enthält 2 items
array[2] = enthält 4 items
array[3] = enthält 1 items
Ich möchte jedoch das versucht wird etwas gleichmäßigere Verteilungen zu erreichen, z.B. sowas:
array[0] = enthält 7 items
array[1] = enthält 6 items
array[2] = enthält 8 items
array[3] = enthält 9 items
Also das nicht so enorme unterschiede wie z.B. 50 items und mal 2 items vorkommen, sondern halbwegs gleichmäßig.
Das muss nicht immer exakt sein, aber es soll versucht werden möglich gleichgroße arrays zu er-splitten.
Die Anzahl der zu erstellenden teil arrays soll nantürlich anch wie vor random gewählt werden, allerdings so, das
das mit der aufteilung halbwegs passt, 26 arrays bei 30 array items als input wäre halt blöd
Kann mir jemand helfen den Algorithmus so zu modifizieren das das oben beschrieben erreicht wird.
Ich weiß nicht recht wie ich das machen soll, - hoffentlich kann mir hier jemand von euch helfen
Lg
Rikudo
Ich stehe vor einem Problem bei dem ich nicht weiß wie ich es am besten umsetzen soll
Zuerst, was habe ich vor :
Ich möchte ein T[] in mehrere kleine arrays unterteilen (mit random größen) und dann ein T[][] zurückgeben, also
ein array welches die einzelnen kleineren arrays enthält.
Wichtig ist das die Arrays schön ihre Reihenfolge behalten.
Das konnte ich so umsetzen: (Dickes dankeschön an @~blaze~ )
C#-Quellcode
- // Split an array into multiple multidemnsional arrays, with different, randomly choosen sizes
- public static T[][] RandomSplitBlock<T>(T[] input)
- {
- if (input == null)
- throw new ArgumentNullException("Input can't be null.");
- Random rnd = new Random(DateTime.Now.Millisecond);
- int index = 0;
- List<T[]> ArrayBlocks = new List<T[]>();
- while (index < input.Length)
- {
- int c = rnd.Next(1, input.Length - index);
- T[] newArr = new T[c];
- Array.Copy(input, index, newArr, 0, c);
- ArrayBlocks.Add(newArr);
- index += c;
- }
- return ArrayBlocks.ToArray();
- }
Zum Problem.
Der obrige algorithmus funktioniert recht gut, was ich jedoch möchte ist eine etwas gleichmäßigere, trotzdem random(!) verteilung
der einzelnen arrayblöcke.
Bei 30 Array Items als input kommen often solche Ergebnisse :
z.B. unterteilt in 4 kleinere arrays, wobei:
array[0] = enthält 23 items
array[1] = enthält 2 items
array[2] = enthält 4 items
array[3] = enthält 1 items
Ich möchte jedoch das versucht wird etwas gleichmäßigere Verteilungen zu erreichen, z.B. sowas:
array[0] = enthält 7 items
array[1] = enthält 6 items
array[2] = enthält 8 items
array[3] = enthält 9 items
Also das nicht so enorme unterschiede wie z.B. 50 items und mal 2 items vorkommen, sondern halbwegs gleichmäßig.
Das muss nicht immer exakt sein, aber es soll versucht werden möglich gleichgroße arrays zu er-splitten.
Die Anzahl der zu erstellenden teil arrays soll nantürlich anch wie vor random gewählt werden, allerdings so, das
das mit der aufteilung halbwegs passt, 26 arrays bei 30 array items als input wäre halt blöd
Kann mir jemand helfen den Algorithmus so zu modifizieren das das oben beschrieben erreicht wird.
Ich weiß nicht recht wie ich das machen soll, - hoffentlich kann mir hier jemand von euch helfen
Lg
Rikudo
C# Developer
Learning C++
Learning C++