Veröffentlicht 18. Dezember 200915 j Ich habe: Ein Array von Array, befüllt mit strings (nennen wir es string[][] pairs) In diesem Array sind, nach einem Index (pairs[index][]) aufgeschlüsselt, immer genau zwei Listen abgespeichert. Beispiel: Liste: links rechts 1 3 <- 1. Paar 11 11 L L 3 A Array sieht so aus: pairs[0][0] = 1 (1. Paar, linke Liste) pairs[0][1] = 3 (1. Paar, rechte Liste) pairs[1][0] = 11 (2. Paar, linke Liste) und so weiter... (das ist jetzt in C#, ebenso sind in diesem Fall mehrdimensionale Arrays möglich, ändern aber nur was an der Anzahl der for-Schleifen) Ich möchte: - In einer sortierten Auflistung aller Arrays keine doppelten Paare haben - Aber die Anzahl des Vorkommens des jeweiligen Paars mit ausgeben Ich frage: Wie bewerkstellige ich das performant? Wie ich das mit einem eindimensionalen Array bewerkstellige würde mir ja noch einleuchten (etwa so: private static ArrayList LöschenDuplikateUndZählen(ArrayList array) { Hashtable ht = new Hashtable(); ArrayList arrayNeu = new ArrayList(); foreach (Object obj in array) { String val = obj.ToString(); if (!ht.Contains(val)) { arrayNeu.Add(obj); ht[val] = true; counter[obj]++; <-PSEUDOCODE (nur Relation) } } return arrayNeu; } ) Bei mehrdimensionalen Arrays bzw. Arrays von Arrays scheitere ich grad. Viel Spaß und vielen herzlichen Dank, Lg Kevin
18. Dezember 200915 j Für die Googler: Nun selbst gelöst. Aber Achtung: Unschön programmiert und prozedural. Sobald ich Zeit habe (oder hier jemand gute Tipps hat) werde ich das objektorientierter halten. Lg Sprache: C# //Initialisierung der benötigten Variablen und Arrays für die Einzelausgabe ArrayList myAL = new ArrayList(); int zaehlen = 0; int neuer_zeahlen = 0; bool enthalten = false; string[][] pairs = new string[linesCount - counting][]; for (int o = 0; o < linesCount - counting; o++) { pairs[o] = new string[3]; } string[][] neu = new string[linesCount - counting][]; for (int o = 0; o < linesCount - counting; o++) { neu[o] = new string[3]; } /* Übertragung in Ausgangsarray von Arrays nur wenn Unterschied zwischen Post- und Pre-Wert vorliegt */ for (int pair = 0; pair < listView1.Items.Count; pair++) { if (listView1.Items[pair].Text != listView2.Items[pair].Text) { pairs[zaehlen][0] = listView1.Items[pair].Text; pairs[zaehlen][1] = listView2.Items[pair].Text; zaehlen++; } } /* Vergleich der Inhalte, um Wiederholungen aufzufangen und den Counter-Wert des Arrays im Array um 1 zu erhöhen */ for (int count = 0; count < pairs.Length; count++) { for (int count2 = 0; count2 < pairs.Length; count2++) { if ((pairs[count][0] == neu[count2][0]) && (pairs[count][1] == neu[count2][1])) { enthalten = true; pairs[count2][2] = (Convert.ToInt32(neu[count2][2]) + 1).ToString(); break; } else { enthalten = false; } } if (!enthalten) { // Ausgabe der gefundenen Paare wenn keine Wiederholung neu[neuer_zeahlen] = pairs[count]; listView4.Items.Add(neu[neuer_zeahlen][0]); listView5.Items.Add(neu[neuer_zeahlen][1]); neuer_zeahlen++; } } for (int u = 0; u < neuer_zeahlen; u++) { //Ausgabe der zugehörigen Counter-Werte listView6.Items.Add((Convert.ToInt32(pairs[u][2]) + 1) .ToString()); } } Bearbeitet 18. Dezember 200915 j von yamukud Bessere Formatierung
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.