Ich möchte zwei Sammlungen (in C #) vergleichen, bin mir aber nicht sicher, wie ich dies am besten effizient implementieren kann.
Ich habe den anderen Thread über Enumerable.SequenceEqual gelesen , aber es ist nicht genau das, wonach ich suche.
In meinem Fall wären zwei Sammlungen gleich, wenn beide dieselben Artikel enthalten (unabhängig von der Reihenfolge).
Beispiel:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
Was ich normalerweise mache, ist, jedes Element einer Sammlung zu durchlaufen und zu prüfen, ob es in der anderen Sammlung vorhanden ist, dann jedes Element der anderen Sammlung zu durchlaufen und zu prüfen, ob es in der ersten Sammlung vorhanden ist. (Ich beginne mit dem Vergleich der Längen).
if (collection1.Count != collection2.Count)
return false; // the collections are not equal
foreach (Item item in collection1)
{
if (!collection2.Contains(item))
return false; // the collections are not equal
}
foreach (Item item in collection2)
{
if (!collection1.Contains(item))
return false; // the collections are not equal
}
return true; // the collections are equal
Dies ist jedoch nicht ganz richtig und wahrscheinlich nicht die effizienteste Methode, um zwei Sammlungen auf Gleichheit zu vergleichen.
Ein Beispiel, das ich mir vorstellen kann, wäre falsch:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
Welches wäre gleich mit meiner Implementierung. Sollte ich nur zählen, wie oft jeder Artikel gefunden wurde, und sicherstellen, dass die Anzahl in beiden Sammlungen gleich ist?
Die Beispiele sind in einer Art C # (nennen wir es Pseudo-C #), aber geben Sie Ihre Antwort in einer beliebigen Sprache, es spielt keine Rolle.
Hinweis: Der Einfachheit halber habe ich in den Beispielen Ganzzahlen verwendet, möchte aber auch Objekte vom Referenztyp verwenden können (sie verhalten sich nicht korrekt als Schlüssel, da nur die Referenz des Objekts verglichen wird, nicht der Inhalt).