[英]How to check whether a string is present in a string array in Windows Phone 7?
[英]How to check whether string contains any element present in the string array
string str = "cat:fox";
string[] strArr = new string[] { "cat", "dog" };
我有一個像str
這樣的str
。 我需要檢查該字符串是否包含strArr
存在的任何元素,就像“ cat”或“ dog”一樣。
如果字符串為“ cat:fox”,則方法應返回true。 如果字符串為“ dog:fox”,則方法應返回true。
我嘗試的是:
string[] split = str.Split(':');
blnReturn = false;
foreach (var item in split)
{
foreach(var item1 in strArr)
{
if(item == item1)
blnReturn = true;
}
}
注意:-含義是值與冒號連接。我需要檢查該字符串是否包含strArr中存在的任何值。
如何做得更好?
更新
要求是,如果str是str = "cat dfgfg:fox";
它不應返回true。 只有它應該是貓。
否則,我們可以通過這種方式檢查strData = str.Split(':');
並且strArr已經在那里。
條件是strArr(字符串數組)中的任何數據都應與strData(字符串數組)匹配,然后應返回true。
看起來您可以使用Enumerable.Any
方法;
string str = "cat:dog";
string[] strArr = new string[] { "cat", "dog" };
if (strArr.Any(str.Contains))
{
// Your string contains one the array values
}
當然,這個作品也cats
, catss
和cat:asdasd:dog
監守的Contains
定義。
您沒有提到,但是如果您不想匹配cat:asdasd dog
這樣的字符串,請查看Marc Gravell的答案 ,該答案看起來是正確的。
如果要區分“貓”和“貓”,最好執行以下操作:
bool Match(string str, string[] strArr)
{
return strArr.Intersect(str.Split(':')).Any();
}
在大多數情況下,您發布的代碼很好。 如果您需要最小化分配(因為這是一個緊密的循環),所以不想使用Split
,則可以使用以下方法:
public static bool ContainsToken(string value, string token, char delimiter = ';')
{
if (string.IsNullOrEmpty(token)) return false;
if (string.IsNullOrEmpty(value)) return false;
int lastIndex = -1, idx, endIndex = value.Length - token.Length, tokenLength = token.Length;
while ((idx = value.IndexOf(token, lastIndex + 1)) > lastIndex)
{
lastIndex = idx;
if ((idx == 0 || (value[idx - 1] == delimiter))
&& (idx == endIndex || (value[idx + tokenLength] == delimiter)))
{
return true;
}
}
return false;
}
然后是這樣的:
static bool ContainsAnyOf(string value, string values)
{
for(int i = 0 ; i < strArr.Length; i++)
{
if(ContainsToken(values, value, ':')) return true;
}
return false;
}
您可以使用LINQ:
bool contains = strArr.Any(pattern => str.Contains(pattern));
這應該可以解決問題,您不必拆分原始字符串並創建一個雙循環:
foreach(string s in array)
if(word.Contains(s))
return true;
return false;
在方法中:
public bool ContainsItem(string word, string[] array)
{
foreach(string s in array)
if(word.Contains(s))
return true;
return false;
}
//Usage:
var result = ContainsItem(str, strArr);
或者,您可以使用Enumerable Any()
方法:
var result = strArr.Any(s => str.Contains(s));
您也可以使用列表而不是數組:
string str = "cat:fox";
List<String> animallist = new List<String>();
animallist.add("cat");
animallist.add("dog");
//Now you can check like
if(animallist.Contains("cat")){
//do something
}
您的嘗試是正確的!
盡管如果您有一個非常大的字符串,並以:
分隔,並且您想經常執行查找操作,則可以使用字典,因為它的Contains
方法為O(1),所以速度非常快!
var dictionary=str.Split(new char[]{':'})
.ToDictionary(x=>x,x=>"");
bool contains=strArr.Any(x=>dictionary.ContainsKey(x));//fast ops
var str = "cat:fox";
var strArr = new[] { "cat", "dog" };
var result = strArr.ToList().Where(str.Contains);
result
第一個元素將包含“ cat”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.