检查字符串的单词是否存在于字符串列表中
Check if words of a string is present in a string list
我有以下代码可以解决问题 -
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
};
我希望能够检查列表中是否存在字符串中的 任何 个单词。我怎样才能做到这一点?
你可以简单地通过这种方式
string check = "the cat sat";
if(test.Any(str => check.Split(' ').Contains(str)))
{
// present
};
您应该提取单词并检查它们在 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
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
的使用是这样的,当您浏览 2 个集合时,它会在 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)));
实现此目的的一种方法是使用 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
};
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;
};
});
我有以下代码可以解决问题 -
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
};
我希望能够检查列表中是否存在字符串中的 任何 个单词。我怎样才能做到这一点?
你可以简单地通过这种方式
string check = "the cat sat";
if(test.Any(str => check.Split(' ').Contains(str)))
{
// present
};
您应该提取单词并检查它们在 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
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
的使用是这样的,当您浏览 2 个集合时,它会在 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)));
实现此目的的一种方法是使用 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
};
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;
};
});