Ich habe mit einem string[]
Array in C # gearbeitet, das von einem Funktionsaufruf zurückgegeben wird. Ich könnte möglicherweise in eine Generic
Sammlung umwandeln, aber ich habe mich gefragt, ob es einen besseren Weg gibt, dies zu tun, möglicherweise mithilfe eines temporären Arrays.
Was ist der beste Weg, um Duplikate aus einem C # -Array zu entfernen?
c#
arrays
duplicates
Lomaxx
quelle
quelle
Antworten:
Sie könnten möglicherweise eine LINQ-Abfrage verwenden, um dies zu tun:
quelle
.Distinct(StringComparer.OrdinalIgnoreCase)
um beispielsweise einen eindeutigen Satz von Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung zu erhalten.The Distinct() method returns an unordered sequence that contains no duplicate values.
Hier ist der HashSet <string> -Ansatz:
Leider erfordert diese Lösung auch .NET Framework 3.5 oder höher, da HashSet erst in dieser Version hinzugefügt wurde. Sie können auch array.Distinct () verwenden , eine Funktion von LINQ.
quelle
Der folgende getestete und funktionierende Code entfernt Duplikate aus einem Array. Sie müssen den System.Collections-Namespace einschließen.
Sie können dies in eine Funktion einbinden, wenn Sie möchten.
quelle
Wenn Sie es sortieren müssen, können Sie eine Sortierung implementieren, die auch Duplikate entfernt.
Tötet dann zwei Fliegen mit einer Klappe.
quelle
Dies hängt möglicherweise davon ab, wie viel Sie für die Lösung benötigen. Wenn das Array niemals so groß wird und Sie die Liste nicht sortieren möchten, möchten Sie möglicherweise etwas Ähnliches wie das Folgende ausprobieren:
quelle
- Dies ist die Interviewfrage , die jedes Mal gestellt wird. Jetzt habe ich seine Codierung gemacht.
quelle
Dies ist O (n ^ 2) , was für eine kurze Liste, die in eine Combo gestopft wird, keine Rolle spielt, aber bei einer großen Sammlung schnell ein Problem sein könnte.
quelle
quelle
Hier ist ein O (n * n) -Ansatz, der den O (1) -Raum verwendet.
Die oben genannten Hash / Linq- Ansätze werden im Allgemeinen im wirklichen Leben verwendet. In Interviews möchten sie jedoch normalerweise einige Einschränkungen festlegen, z. B. konstanten Speicherplatz, der Hash oder keine interne API ausschließt - was die Verwendung von LINQ ausschließt .
quelle
strIn[j] == strIn[i]
) vergleicht eine Zeichenfolge mit sich selbst, sofern dies nicht mit einer if-Anweisung berücksichtigt wird.Fügen Sie alle Zeichenfolgen zu einem Wörterbuch hinzu und rufen Sie anschließend die Keys-Eigenschaft ab. Dadurch wird jede eindeutige Zeichenfolge erzeugt, jedoch nicht unbedingt in derselben Reihenfolge, in der Ihre ursprüngliche Eingabe sie hatte.
Wenn das Endergebnis dieselbe Reihenfolge wie die ursprüngliche Eingabe haben soll, verwenden Sie stattdessen den folgenden Algorithmus, wenn Sie das erste Vorkommen jeder Zeichenfolge berücksichtigen:
Am Ende enthält die Liste das erste Vorkommen jeder einzelnen Zeichenfolge.
Stellen Sie sicher, dass Sie beim Erstellen Ihres Wörterbuchs Dinge wie Kultur und dergleichen berücksichtigen, um sicherzustellen, dass Sie Duplikate mit Buchstaben mit Akzent korrekt behandeln.
quelle
Der folgende Code versucht, Duplikate aus einer ArrayList zu entfernen, obwohl dies keine optimale Lösung ist. Diese Frage wurde mir während eines Interviews gestellt, um Duplikate durch Rekursion und ohne Verwendung einer zweiten / temporären Arrayliste zu entfernen:
quelle
Einfache Lösung:
quelle
Möglicherweise Hashset, das keine doppelten Elemente speichert und Anforderungen zum Hinzufügen von Duplikaten stillschweigend ignoriert.
quelle
HINWEIS: NICHT getestet!
Könnte tun, was Sie brauchen ...
EDIT Argh !!! von Rob in weniger als einer Minute geschlagen!
quelle
Testete das unten und es funktioniert. Was cool ist, ist, dass es auch eine kultursensible Suche durchführt
}}
--AptSenSDET
quelle
Dieser Code entfernt zu 100% doppelte Werte aus einem Array [wie ich ein [i] verwendet habe] ..... Sie können es in jede OO-Sprache konvertieren ..... :)
quelle
Generische Erweiterungsmethode:
quelle
Sie können diesen Code verwenden, wenn Sie mit einer ArrayList arbeiten
quelle
quelle
Im Folgenden finden Sie eine einfache Logik in Java, mit der Sie Elemente eines Arrays zweimal durchlaufen. Wenn Sie dasselbe Element sehen, weisen Sie ihm Null zu und berühren den Index des zu vergleichenden Elements nicht.
quelle
quelle
quelle
Kkk Ich bin mir nicht sicher, ob dies Hexerei oder nur schöner Code ist
1 strINvalues .Split (','). Distinct (). ToArray ()
2 string.Join (",", XXX);
1 Teilen Sie das Array und entfernen Sie Duplikate mit Distinct [LINQ]. 2 Fügen Sie es ohne Duplikate wieder zusammen.
Entschuldigung, ich habe nie den Text auf StackOverFlow gelesen, nur den Code. es macht mehr Sinn als der Text;)
quelle
quelle
Die beste Art? Schwer zu sagen, der HashSet-Ansatz sieht schnell aus, aber (abhängig von den Daten) die Verwendung eines Sortieralgorithmus (CountSort?) Kann viel schneller sein.
Fast verzweigungsfrei. Wie? Debug-Modus, Schritt in (F11) mit einem kleinen Array: {1,3,1,1,0}
Eine Lösung mit zwei verschachtelten Schleifen kann einige Zeit in Anspruch nehmen, insbesondere bei größeren Arrays.
quelle