我有一个对象列表。该对象包含一个字符串列表。像那样:
public class ObjectA
{
...
IList<string> StringList;
}
Run Code Online (Sandbox Code Playgroud)
我有一个要在 StringList 上搜索的单词列表。我需要在 ObjectA 列表上搜索,并找到包含所有单词(所有单词的一部分)的所有 ObjectA。
所以我这样做了:
List<ObjectA> myObjectList;
List<string> wordsToFind;
var result = myObjectList.Where(objectA => wordsToFind.All(objectA.StringList.Contains));
Run Code Online (Sandbox Code Playgroud)
问题是我的结果只得到整个单词(等于)。我希望获得包含我的 WordToFind 部分内容的结果。
例子
wordsToFind = {"tes","don"};
StringListElement = {"test", "done"}
Run Code Online (Sandbox Code Playgroud)
应该返回我的选择。
我怎样才能做到这一点?
IndexOf可能是你想去的地方,或者它的重载之一
报告指定 Unicode 字符或字符串在此实例中第一次出现的从零开始的索引。如果在此实例中未找到该字符或字符串,该方法将返回 -1。
List<ObjectA> myObjectList;
List<string> wordsToFind;
var result = myObjectList.Where(x => x.StringList.All(y => wordsToFind.Any(z => y.IndexOf(z) >= 0)));
Run Code Online (Sandbox Code Playgroud)
另请注意,这的时间复杂度非常高
更新
另请注意,如果您想要不区分大小写,请使用
y.IndexOf(z, StringComparison.InvariantCultureIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
或以下之一
CurrentCulture使用区域性敏感的排序规则和当前区域性比较字符串。
CurrentCultureIgnoreCase使用区域性敏感的排序规则、当前区域性来比较字符串,并忽略所比较字符串的大小写。
InvariantCulture使用区域性敏感排序规则和不变区域性比较字符串。
InvariantCultureIgnoreCase使用区域性敏感的排序规则、不变区域性来比较字符串,并忽略所比较字符串的大小写。
Ordinal使用序数(二进制)排序规则比较字符串。
OrdinalIgnoreCase使用序数(二进制)排序规则比较字符串并忽略所比较字符串的大小写。
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |