我將如何去製作,將返回true
如果字符串包含數組的任何元素的功能?比較字符串和數組C#
事情是這樣的:
string str = "hi how are you";
string[] words = {"hi", "hey", "hello"};
將返回true
。
我將如何去製作,將返回true
如果字符串包含數組的任何元素的功能?比較字符串和數組C#
事情是這樣的:
string str = "hi how are you";
string[] words = {"hi", "hey", "hello"};
將返回true
。
你可以這樣說:
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"
不存在有作爲一個單詞)。
或者,如果你不介意失去效率的溫和量更readabili TY:'如果(array.Any(S => myStr.Contains(S)){'也將這樣做,我相信。 – Jeff
謝謝,這正是我一直在尋找的!也感謝您修復我的壞格式Mr_Green :)也很容易改變它,以便它不區分大小寫? – user1852287
@ user1852287是 - 用'myStr.IndexOf(S,StringComparison.OrdinalIgnoreCase)'使其不區分大小寫。 – dasblinkenlight
您可以分割字符串,並使用Enumerable.Intersect
。這將是多大的長字符串效率比Any
+ IndexOf
:
var any = words.Intersect(str.Split()).Any();
@ user18522877這是假設你像dasblinkenlight一個例子尋找整個單詞,而不是子,那麼就是它會返回'FALSE' - 這可能是你在找什麼,但如果是,那麼你或許應該改變你的問題。 – Jeff
無需循環的,這裏是一個快速的方法:
string [] arr = {"One","Two","Three"};
var target = "One";
var results = Array.FindAll(arr, s => s.Equals(target));
速度如何?仍然是循環.. –
我認爲你需要檢查一個字符串是否包含在其他字符串(我不知道性能)
foreach(string strLine in words)
{
if(strLine.Contains(str)) //or str.Contains(strLine)
{
return true;
}
}
//return false;
'foreach' +'String.IndexOf' – zerkms