Ein paar Ints auf der Liste speichern
Wie kann ich speichern Paare von ganzen zahlen in einer Liste?
Ich weiß, ich könnte machen eine Klasse für Sie wie:
class Pair
{
int i1,i2;
}
Aber wenn ich das Tue, bin ich nicht in der Lage zu verwenden, die Contains
Funktion, um zu überprüfen, ob ein gegebenes paar in der Liste. Wie kann ich das tun so kann ich problemlos speichern von ganzen zahlen in einer Liste und prüfen Sie, ob ein paar von ganzen zahlen existiert bereits? Ich kann keine Tabelle verwenden, weil es ist nicht bekannt, wie viele Paare gibt es.
EDIT:
Vergaß hinzuzufügen:
In meinem Programm Paare (x, y) und (y, x) gleichwertig behandelt werden.
EDIT:
(x,y) und (y,x) sind gleich, beim überprüfen, ob Point
ist in der Liste, aber x
und y
können nicht vertauscht werden, da x
und y
stellen eine Verbindung zwischen zwei Punkten (integer id der Punkt, und Nein, ich kann nicht jede Referenz etc...). Wenn ich Kontrolle wenn List
enthält eine Verbindung, es ist nicht wichtig, wenn es (x,y) oder (y,x) aber später würde ich die Informationen benötigen.
InformationsquelleAutor der Frage Miko Kronn | 2010-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie .NET 4.0, könnten Sie die
Tuple
Klasse wie inund
Beachten Sie, dass, wenn Sie gehen den Weg mit
Tuple<int, int>
dann müssen Sie erstellen Sie eine benutzerdefinierte Implementierung derIEqualityComparer<Tuple<TFirst, TSecond>>
zu reflektieren Gleichheit Regeln, die(x, y)
als gleich zu(y, x)
. Sie müssen dann übergeben Sie eine Instanz dieser comparer zuList<T>.Contains(T, IEqualityComparer<T>)
(hierT
istTuple<int, int>
für Sie).Sonst, wenn Sie nicht können oder nicht wollen, zu verwenden
Tuple
dann müssen Sie implementieren eineIEqualityComparer<Pair>
für IhrePair
Klasse oder überschreibenObject.Equals
undObject.GetHashCode
.und
Wenn Sie
dann wird es mit
Equals
undGetHashCode
aber wenn Siedann wird es mit
PairEqualityComparer.Equals
undPairEqualityComparer.GetHashCode
. Beachten Sie, dass diese könnte anders sein als Ihre Implementierungen vonObject.Equals
undObject.GetHashCode
.Schließlich, wenn Sie Tests für Rückhaltung ist etwas, dass Sie tun dann oft ein
List
ist nicht Ihre beste Wette, Sie sollten verwenden Sie eine Klasse für diesen Zweck entwickelt wurde, wie einHashSet
.InformationsquelleAutor der Antwort jason
Die Klasse ist Ihre beste Wette. Wenn du tot bist Satz auf die Verwendung der
Contains
Methode, die Sie implementieren müssen, um dieIComparable
Schnittstelle in Ihrem Paar-Klasse. Dies ermöglicht es Ihnen, um festzustellen, was "Gleichheit" bedeutet für das paar von ganzen zahlen.Die einfachste Möglichkeit wäre, die Klasse zu erstellen, als Sie haben, und erstellen Sie dann und Erweiterung der Methode auf die
List<T>
Objekt.InformationsquelleAutor der Antwort Joel Etherton
Einen anderen Weg, dies zu tun wäre, um eine
List<ulong>
füllen Sie es, indem Sie die größte Zahl in der oberen 32 bits und die andere Zahl in der unteren 32 bits:InformationsquelleAutor der Antwort Jim Mischel