Was wäre der beste Weg, um in einem string[]
zu sehen, ob es ein Element enthält. Dies war mein erster Versuch. Aber vielleicht gibt es etwas, das ich übersehen habe. Die Array-Größe darf nicht größer als 200 Elemente sein.
bool isStringInArray(string[] strArray, string key)
{
for (int i = 0; i <= strArray.Length - 1; i++)
if (strArray[i] == key)
return true;
return false;
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.Contains(foo)
Ich weiß, dass dies alt ist, aber ich wollte, dass die neuen Leser wissen, dass es eine neue Methode gibt, um dies mithilfe von Generika und Erweiterungsmethoden zu tun.
Sie können meinen Blog-Beitrag lesen , um weitere Informationen dazu zu erhalten. Die Hauptidee ist jedoch folgende:
Durch Hinzufügen dieser Erweiterungsmethode zu Ihrem Code:
Sie können Ihre Suche folgendermaßen durchführen:
Es funktioniert bei jedem Typ (solange Sie eine gute Gleichheitsmethode erstellen). Jeder Werttyp sicher.
quelle
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
möchte so etwas wie das, was ich tun möchte, durch die who-Datentabelle in der ersten Spalte schauen, um zu sehen, ob die Werte nicht in einer der folgenden Zeichenfolgen enden. Wenn dies nicht der Fall ist, möchte ich eine Zeichenfolge zurückgeben, die dies angibt es ist ein Wert fehlt.00
zum Beispiel Ihr Beispiel verwendet , kann ich nicht zu arbeiten , diese zu bekommen scheinen , es ist ein bisschen schwieriger , da ich nicht keinen String ein Bool kehre ich verändert Ihre Methode zurückzukehren , aber immer noch nicht funktioniert wollen Anregungenpublic static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Sie suchen einfach nach der Array.Exists-Funktion (oder nach der Contains-Erweiterungsmethode, wenn Sie .NET 3.5 verwenden, was etwas praktischer ist).
quelle
Linq (für s & gs):
oder je nach Anforderung
quelle
Ist das Array sortiert? Wenn ja, könnten Sie eine binäre Suche durchführen . Hier ist auch die .NET-Implementierung. Wenn das Array sortiert ist, verbessert eine binäre Suche die Leistung gegenüber jeder iterativen Lösung.
quelle
Arrays sind im Allgemeinen eine schlechte Datenstruktur, wenn Sie fragen möchten, ob sich ein bestimmtes Objekt in der Sammlung befindet oder nicht.
Wenn Sie diese Suche häufig ausführen, lohnt es sich möglicherweise,
Dictionary<string, something>
ein Array anstelle eines Arrays zu verwenden. Suchvorgänge in einem Wörterbuch sind O (1) (konstante Zeit), während das Durchsuchen des Arrays O (N) ist (benötigt Zeit proportional zur Länge des Arrays).Selbst wenn das Array nur aus maximal 200 Elementen besteht, ist das Wörterbuch bei vielen dieser Suchvorgänge wahrscheinlich schneller.
quelle
Sie können auch LINQ verwenden, um über das Array zu iterieren. oder Sie können die Find-Methode verwenden, bei der ein Delegat danach sucht. Ich denke jedoch, dass die Suchmethode etwas teurer ist, als nur eine Schleife durchzuführen.
quelle
Wie im obigen Thread oft erwähnt, hängt es vom verwendeten Framework ab. .Net Framework 3 und höher verfügt über die Methoden .Contains () oder Exists () für Arrays. Für andere Frameworks unten können Sie den folgenden Trick ausführen, anstatt das Array zu durchlaufen ...
Ich bin mir der Effizienz nicht sicher ... Dave
quelle
Dies ist schneller als das manuelle Durchlaufen des Arrays:
quelle
Wenn Sie Linq nicht verwenden möchten oder können, können Sie auch die statische
Array.Exists(...);
Funktion verwenden:https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Wenn das Prädikat true zurückgibt, ist catInside ebenfalls true.
quelle