Wie überprüfe ich, ob sich ein Wert in einem Array in C # befindet?
Ich möchte ein Array mit einer Liste von Druckernamen erstellen.
Diese werden einer Methode zugeführt, die nacheinander jede Zeichenfolge betrachtet. Wenn die Zeichenfolge mit einem Wert in einem Array identisch ist, führen Sie diese Aktion aus.
Beispielsweise:
string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
PrinterSetup(p);
}
Dies sind die Namen der Drucker, die der PrinterSetup-Methode zugeführt werden.
PrinterSetup sieht ungefähr so aus (ein Pseudocode):
public void PrinterSetup(printer)
{
if (printer == "jupiter")
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}
Wie formatiere ich if (printer == "jupiter")
so, dass C # es erkennen kann?
printer.Equals("jupiter")
. Wenn es das erstere ist, verwenden Sielinq
undprinter.Contains("jupiter")
printer.Equals("jupiter")
... Der OP-Codeif (printer == "jupiter")
funktioniert einwandfrei ... solange er alsprinter
Zeichenfolge deklariert ist, wie Skeet bemerkt.Antworten:
Fügen Sie den erforderlichen Namespace hinzu
Dann können Sie die linq-
Contains()
Methode verwendenquelle
How do I check if a value is in an array in C#?
) und auch effizient. Keine Schleife, keine zusätzliche Methode. Nur ein Namespace ist extra, was keine große Sache ist.((IList)printer).Contains("Jupiter")
was nicht generisch ist (möglicherweise Werttypen usw.) und sogar für mehrdimensionale Arrays funktioniert. Und seit .NET 2.0 haben wir das Magischere,((IList<string>)printer).Contains("Jupiter")
das typsicherer ist. Der Linq-Ansatz war in .NET 3.5 neu.1) Richtig 2) Falsch 3) Richtig 4) Falsch
quelle
quelle
Etwas wie das?
quelle
quelle
a
es sich um ein mehrdimensionales Array handelt (wienew string[10, 20, 15]
zum Beispiel), mit einer Ausnahme. Es wird auch mit eindimensionalen Arrays fehlschlagen, die nicht von Null indiziert sind (wieArray.CreateInstance(typeof(string), new[] { 5, }, new[] { -2, })
ich es zugegebenermaßen selten in C # gebe), mit einem möglicherweise falschen Rückgabewert. Diese Mängel sind mit Generika leicht zu beheben:public static bool Contains<TElement>(TElement[] a, TElement val) { return Array.IndexOf(a, val) != -1; }
Hinweis: Die Frage bezieht sich auf Arrays von Zeichenfolgen. Die genannten Routinen dürfen nicht mit der .Contains-Methode für einzelne Zeichenfolgen gemischt werden.
Ich möchte eine erweiterte Antwort hinzufügen, die sich auf verschiedene C # -Versionen bezieht, und zwar aus zwei Gründen:
Die akzeptierte Antwort erfordert Linq, das perfekt idiomatisches C # ist, obwohl es nicht kostenlos ist und in C # 2.0 oder niedriger nicht verfügbar ist. Wenn ein Array beteiligt ist, kann die Leistung von Bedeutung sein. Daher gibt es Situationen, in denen Sie bei Array-Methoden bleiben möchten.
Keine Antwort befasst sich direkt mit der Frage, wo sie auch gebeten wurde, dies in eine Funktion zu setzen (Da einige Antworten auch Strings mit Arrays von Strings mischen, ist dies nicht völlig unwichtig).
Array.Exists () ist eine C # /. NET 2.0-Methode und benötigt keine Linq. Die Suche in Arrays ist O (n). Verwenden Sie für einen noch schnelleren Zugriff HashSet oder ähnliche Sammlungen.
Seit .NET 3.5 gibt es auch eine generische Methode
Array<T>.Exists()
:Sie können eine eigene Erweiterungsmethode (C # 3.0 und höher) schreiben, um den syntaktischen Zucker hinzuzufügen, um die gleichen / ähnlichen ".Contains" wie für Zeichenfolgen für alle Arrays zu erhalten, ohne Linq einzuschließen:
In diesem Fall wird diese
ArrayContains()
Methode verwendet und nicht die Contains-Methode von Linq.Die an anderer Stelle erwähnten .Contains-Methoden beziehen sich auf
List<T>.Contains
(seit C # 2.0) oderArrayList.Contains
(seit C # 1.1), nicht jedoch auf Arrays selbst direkt.quelle
Sie vermissen nur etwas in Ihrer Methode:
Fügen
string
Sie einfach hinzu und es wird Ihnen gut gehen.quelle
Nicht ganz klar, was Ihr Problem ist, aber es hört sich so an, als ob Sie so etwas wollen:
quelle
Erwägen Sie die Verwendung von
HashSet<T>
Class, um die Suchleistung zu verbessern:Beispielsweise:
quelle
Ich habe jetzt über 2 Stunden gesucht, um einen guten Weg zu finden , wie man Duplikate in einer Liste findet und wie man sie entfernt . Hier ist die einfachste Antwort:
Die Ausgabe sieht folgendermaßen aus: Doppelte Elemente werden in der neuen Liste mit dem Namen "Ausgesprochen" entfernt!
quelle