我有以下代码可以处理 -
List<string> test = new List<string>();
test.Add("cat");
if (test.Any(str => str.Contains("cat")))
{
// do something
};
但是有一种方法可以检查是否存在完全匹配的实例 -
if (test.Any(str => str.Contains("the cat sat")))
{
// do something
};
我希望能够检查列表中是否存在字符串中的任何字样。我怎样才能做到这一点?
答案 0 :(得分:5)
您应该在test
var data = "the cat sat";
var words = data.Split(null);
if (test.Any(str => words.Any(word => str.Contains(word)))
{
// do something
}
如果您想检查完全匹配,请使用word => str == word
。
"a cat".Contains("cat") //true
"a cat" == "cat" //false
答案 1 :(得分:4)
你可以这样做
string check = "the cat sat";
if(test.Any(str => check.Split(' ').Contains(str)))
{
// present
};
答案 2 :(得分:4)
Split
你的句子变成了不同的词:
var words = new HashSet<string>("the cat sat".Split(' '));
然后你可以:
检查该集合是否包含任何str
s:
var test = new List<string> { "cat" };
var words = new HashSet<string>("the cat sat".Split(' '));
var result = test.Any(str => words.Contains(str)); // In this case "true"
使用Intersect
:
var test = new List<string> { "cat" };
var words = new HashSet<string>("the cat sat".Split(' '));
var result = test.Intersect(words).Any();
使用HashSet
是这样的,当您浏览o(n)
而不是o(n)2
如果您在test
列表中没有完全匹配,如下例所示:
var test = new List<string> { "some cat" };
然后你可以这样做:
var test = new List<string> { "some cat" };
var words = "the cat sat".Split(' ').ToList();
var result = words.Any(word => test.Any(item => item.Contains(word)));
答案 3 :(得分:2)
实现这一目标的一种方法是使用string
对象的扩展名。
public static bool Contains(this string input, bool caseSensitive, params string[] items)
{
input = !caseSensitive ? input.ToLower() : input;
foreach (var item in items)
{
if (input.Contains(!caseSensitive ? item.ToLower() : item))
return true;
}
return false;
}
您的以下行也可以进行微小的更改:
if (test.Any(str => str.Contains(true, "the", "cat", "sat"))) // true for case sensitive contains
{
// do something
};
答案 4 :(得分:1)
bool contains = false;
string checkString = "the cat sat";
checkString.Split(' ').ToList().Foreach(x => {
if (test.Any(str => str.Contains(x)) && !contains)
{
// do something
contains = true;
};
});