2012-11-26 22 views
7

Jak mam wykonać funkcję, która zwróci true, jeśli ciąg zawiera dowolny element tablicy?Porównywanie ciągów i tablic C#

coś takiego:

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

wróci true.

+2

'foreach' +' String.IndexOf' – zerkms

Odpowiedz

9

Można to zrobić tak:

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 
} 

Takie podejście czyni nie wymagać, że element będzie pełny słowo (czyli powyżej fragment wróci true, chociaż słowo "fox" nie występuje tam jako pojedyncze słowo).

+1

Lub jeśli nie przeszkadza tracąc łagodny ilość efektywności więcej readabili ty: 'if (array.Any (s => myStr.Contains (s)) {" zrobi to również, jak sądzę. – Jeff

+0

Dzięki, to jest dokładnie to, czego szukałem! Dziękuję również za naprawienie złego formatowania Mr_Green :) Czy łatwo jest zmienić to tak, aby nie było w nim mowy? – user1852287

+2

@ user1852287 Tak - użyj 'myStr.IndexOf (s, StringComparison.OrdinalIgnoreCase)', aby uczynić go niewrażliwym na wielkość liter. – dasblinkenlight

0

Możesz podzielić ciąg znaków i użyć Enumerable.Intersect. To będzie o wiele bardziej efektywne dla długich ciągów niż Any + IndexOf:

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

@ user18522877 Zakłada to, że szukasz całych słów, a nie podciągów, więc w przykładzie takim jak dasblinkenlight zwróci 'false' - to może być to, czego szukasz, ale jeśli tak, to prawdopodobnie powinieneś zmienić swoje pytanie . – Jeff

0

Nie potrzeba pętli, tutaj jest szybsza metoda:

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

Jak to jest szybciej? Czy nadal pętle ... –

0

myślę, że trzeba by sprawdzić, czy ciąg zawiera w drugi ciąg (nie wiem o wydajności)

foreach(string strLine in words) 
{ 
    if(strLine.Contains(str)) //or str.Contains(strLine) 
    { 
     return true; 
    } 
} 
//return false; 
Powiązane problemy