2012-11-26 207 views
7

我將如何去製作,將返回true如果字符串包含數組的任何元素的功能?比較字符串和數組C#

事情是這樣的:

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

將返回true

+2

'foreach' +'String.IndexOf' – zerkms

回答

9

你可以這樣說:

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 
} 

這種方法確實要求該元素是一個完整的字(即上述片段將返回true,儘管這個詞"fox"不存在有作爲一個單詞)。

+1

或者,如果你不介意失去效率的溫和量更readabili TY:'如果(array.Any(S => myStr.Contains(S)){'也將這樣做,我相信。 – Jeff

+0

謝謝,這正是我一直在尋找的!也感謝您修復我的壞格式Mr_Green :)也很容易改變它,以便它不區分大小寫? – user1852287

+2

@ user1852287是 - 用'myStr.IndexOf(S,StringComparison.OrdinalIgnoreCase)'使其不區分大小寫。 – dasblinkenlight

0

您可以分割字符串,並使用Enumerable.Intersect。這將是多大的長字符串效率比Any + IndexOf

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

@ user18522877這是假設你像dasblinkenlight一個例子尋找整個單詞,而不是子,那麼就是它會返回'FALSE' - 這可能是你在找什麼,但如果是,那麼你或許應該改變你的問題。 – Jeff

0

無需循環的,這裏是一個快速的方法:

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

速度如何?仍然是循環.. –

0

我認爲你需要檢查一個字符串是否包含在其他字符串(我不知道性能)

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