2012-11-26 22 views
7

Wie würde ich eine Funktion erstellen, die true zurückgibt, wenn eine Zeichenfolge ein Element eines Arrays enthält?Vergleichen von Zeichenfolgen und Arrays C#

Etwas wie folgt aus:

string str = "hi how are you"; 
string[] words = {"hi", "hey", "hello"}; 

würde true zurückzukehren.

+2

'foreach' +' String.IndexOf' – zerkms

Antwort

9

Sie können es wie folgt tun:

var array = new[] {"quick", "brown", "fox"}; 
var myString = "I love foxes."; 
if (array.Any(s => myStr.IndexOf(s) >= 0)) { 
    // One of the elements is there 
} 

Dieser Ansatz macht nicht erfordern, dass das Element ein ganzes Wort (dh das obige Fragment würde true zurückkehren, auch wenn das Wort "fox" dort nicht vorhanden ist als ein einziges Wort).

+1

Oder wenn Sie nichts dagegen haben einen milden Menge an Effizienz für mehr readabili verlieren ty: 'if (array.Any (s => myStr.Contains (s)) {' wird auch funktionieren, glaube ich. – Jeff

+0

Danke, das ist genau das, was ich gesucht habe! Danke auch für das Reparieren meiner schlechten Formatierung Mr_Green :) Ist es auch einfach, es so zu ändern, dass es Groß- und Kleinschreibung nicht beachtet? – user1852287

+2

@ user1852287 Ja - verwenden Sie 'myStr.IndexOf (s, StringComparison.OrdinalIgnoreCase)', um die Groß- und Kleinschreibung zu ignorieren. – dasblinkenlight

0

Sie können eine Zeichenfolge teilen und Enumerable.Intersect verwenden. Es wird viel effizienter für lange Strings als Any + IndexOf:

var any = words.Intersect(str.Split()).Any(); 
+0

@ user18522877 Das setzt voraus, dass Sie nach ganzen Wörtern anstatt nach Teilstrings suchen. In einem Beispiel wie dasblinkenlight gibt es also 'false' zurück - das könnte das sein, wonach Sie suchen, aber wenn es dann ist, sollten Sie wahrscheinlich Ihre Frage ändern . – Jeff

0

Keine Notwendigkeit der Looping, hier ist eine schnellere Methode:

string [] arr = {"One","Two","Three"}; 
    var target = "One"; 
    var results = Array.FindAll(arr, s => s.Equals(target)); 
+0

Wie ist das schneller? Ist immer noch loops .. –

0

Ich glaube, Sie überprüfen müssen, ob eine Zeichenfolge enthält in andere Zeichenfolge (ich weiß nicht, über die Leistung)

foreach(string strLine in words) 
{ 
    if(strLine.Contains(str)) //or str.Contains(strLine) 
    { 
     return true; 
    } 
} 
//return false; 
Verwandte Themen