Dieser Code erlaubt es eine Liste so zu verarbeiten, dass immer mehrere Werte (Anzahl vorgegeben: groupSize) so gepackt werden, dass Sie zusammen passen.
Für weitere Informationen, einfach den Source-Code mit den Kommentaren anschauen.
//
// Speicher-effiziente Ordnung von Objekten aus einer Liste in ein 2-dimensionales Array
// dessen breite bereits festgelegt ist.
// Dass Array hat folgenden größen: [n, groupSize]. n ist der von Algorithmus erkannte Wert
// für die notwendige Anzahl an Zeilen ist.
// -> Siehe auch "TestRCreateObjectGroups()" für die genaue Verwendung mit Ergebnisbeispiel.
// Beachtet: Sollten es nicht exakt so viele Elemente sein, dass die Liste gefüllt werden kann,
// so bleiben die letzten Felder leer.
//
public static T[,] RCreateObjectGroups<T>(List<T> source, int groupSize) {
// return: T[n][groupSize]
int mcount = source.Count;
int rows = mcount / 5 + 1; // Bestimmt die Anzahl der Zeilen.
T[,] ret = new T[(int)(rows), groupSize];
int num1 = 0; //Zählter für mcount
for (int i = 0; i < rows; i++) { // Alle Zeilen druchlaufen
for (int i2 = 0; i2 < groupSize; i2++) {
ret [i, i2] = source [num1];
//Alle Elemente wurden druchlaufen; Algorithmus stoppen
if( ++num1 > (mcount - 1)) break;
}
}
return ret;
}
//
// Test für "RCreateObjectGroups()"
//
// Beispiel:
/*
* Liste: 0, 1, 2, ... , 97, 98
*
Ausgabe:
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
25 26 27 28 29
30 31 32 33 34
35 36 37 38 39
40 41 42 43 44
45 46 47 48 49
50 51 52 53 54
55 56 57 58 59
60 61 62 63 64
65 66 67 68 69
70 71 72 73 74
75 76 77 78 79
80 81 82 83 84
85 86 87 88 89
90 91 92 93 94
95 96 97 0 0
*/
public static void TestRCreateObjectGroups() {
// Create test list
List<int> l = new List<int> ();
for (int i = 0; i < 98; i++) {
l.Add (i);
}
int[,] r = RCreateObjectGroups (l, 5);
// Write results out
for (int i = 0; i < r.GetLength(0); i++) { // process als rows
string s = "";
for (int i2 = 0; i2 < 5; i2++) { // GroupSize was 5
s += r [i, i2].ToString () + " ";
}
Console.WriteLine (s);
}
}
1 Kommentare zum Snippet