Feedback

C# - Liste in Gruppen sortieren.

Veröffentlicht von am 16.06.2015
(0 Bewertungen)
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);
			}
		}
Abgelegt unter List, Sort, Groups, Table, Array.

1 Kommentare zum Snippet

Koopakiller schrieb am 18.06.2015:
Hi Thomas :)
ich hab vor einiger Zeit mal ein ähnliches Snippet geschrieben. Das macht schon eine etwas andere Aufgabe ist aber vielleicht auch ganz interessant: http://dotnet-snippets.de/snippet/linq-liste-aufspalten/4922
 

Logge dich ein, um hier zu kommentieren!