如何解决从另一个字符串中按特定顺序查找字符串数组中的所有字符串mvc
例如,我在数组中有以下字符串:
var name = new string[] { "john","a","doe" };
以及这些名称列表:
var names = new List<string>() { "John Alias Doe","Johnny Dude Doe","Jane gal Doe","John Wick A. Doe" };
结果将不包括“ Johnny Dude Doe”,因为在他的名字中“ John”和“ Doe”之间没有“ a”。
我正在使用MVC和linq。目前我正在使用这个:
var nameresults = names.Where(ns => name.All(n => ns.Contains(n))).ToList();
解决方法
尝试以下操作:
var targetName = new List<string>() { "John","A","Doe" };
var namesToSearch = new List<string>() { "John Alias Doe","Johnny Dude Doe","Jane Gal Doe","John Wick A. Doe" };
var results = namesToSearch.Where(x => targetName.All(y => x.Contains(y))).ToList();
字符串搜索区分大小写,这可能与您的代码有误。
如果您希望它以不区分大小写的方式工作,则将查询更改为:
var targetName = new List<string>() { "john","a","doe" };
var namesToSearch = new List<string>() { "John Alias Doe","John Wick A. Doe" };
var results = namesToSearch.Where(x => targetName.All(y => x.ToLower().Contains(y.ToLower()))).ToList();
,
我不确定如何从仅使用linq的方法解决此特定问题,但是,这将做您要尝试正确实现的目标。
string[] matchArray = new string[] { "john","doe" };
List<string> namesToCheck = new List<string>() { "John Alias Doe","John Wick A. Doe" };
List<string> matchedNames = new List<string>(),notMatchedNames = new List<string>();
foreach (string name in namesToCheck) {
if (string.IsNullOrEmpty(name.Trim())) { //invalid string
continue;
}
if (!name.Contains(" ")) { // potentially missing middle and last names... handle this how you want
continue;
}
string[] nameSegments = name.Split(' ');
bool nameIsInProperFormat = nameSegments.Length >= 3;
if (!nameIsInProperFormat) {
continue; // for now continue,you will need to handle this?
}
string firstName = nameSegments[0],lastName = nameSegments[nameSegments.Length - 1],middleName = string.Empty;
for (int i = 1; i < nameSegments.Length - 1; i++) {
middleName += nameSegments[i];
}
bool firstNameMeetsCriteria = firstName.ToUpper().Contains(matchArray[0].ToUpper());
bool middleNameMeetsCriteria = middleName.ToUpper().Contains(matchArray[1].ToUpper());
bool lastNameMeetsCriteria = lastName.ToUpper().Contains(matchArray[2].ToUpper());
if (firstNameMeetsCriteria &&
middleNameMeetsCriteria &&
lastNameMeetsCriteria) {
matchedNames.Add(name);
}
else {
notMatchedNames.Add(name);
}
}
Console.WriteLine($"Matched Names:");
foreach (string matchedName in matchedNames) {
Console.WriteLine(matchedName);
}
Console.WriteLine($"{Environment.NewLine}");
Console.WriteLine($"Not Matched Names:");
foreach (string notFoundName in notMatchedNames) {
Console.WriteLine(notFoundName);
}
输出:
Matched Names:
John Alias Doe
John Wick A. Doe
Not Matched Names:
Johnny Dude Doe
Jane Gal Doe
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。