C# 可枚举方法,如Intersect()和部分比较
C#代码: 我想在a1中搜索a2字符串,其中C# 可枚举方法,如Intersect()和部分比较,c#,C#,C#代码: 我想在a1中搜索a2字符串,其中 a2[yank]将产生“yank”和“Yankee” a2[yankedoodle]产生null a2[m]将产生“MLB” 类似于strstr()忽略大小写 Intersect()返回完全匹配,我需要部分匹配 有没有一种方法,或者只是做了很长的路?你所做的是非常具体的,所以它怀疑有任何预先构建的东西存在这样的东西。您只需要编写逻辑,比如: string[] a1 = {"Yank","Yankee","MLB"}; string[] a2 =
将产生a2[yank]
和“yank”
“Yankee”
产生a2[yankedoodle]
null
将产生a2[m]
“MLB”
strstr()
忽略大小写
Intersect()
返回完全匹配,我需要部分匹配
有没有一种方法,或者只是做了很长的路?你所做的是非常具体的,所以它怀疑有任何预先构建的东西存在这样的东西。您只需要编写逻辑,比如:
string[] a1 = {"Yank","Yankee","MLB"};
string[] a2 = {"yan","yankeedoodle","m"};
因此,您希望以不区分大小写的方式查找第一个集合中第二个集合中的所有部分匹配。假定partial表示子字符串:
a2.ToDictionary(
prefix => prefix,
prefix => a1.Where(str => str.StartsWith(
prefix,
true,
CultureInfo.InvariantCulture)));
您可以像使用字典一样使用它,但如果找不到键,则会生成一个空序列:
var A2ToA1lookup = a2.ToLookup(
s2 => s2,
s2 => a1.Where(s1 => s1.IndexOf(s2, StringComparison.InvariantCultureIgnoreCase) >= 0));
您可以使用LINQ:
foreach (var matches in A2ToA1lookup["yan"])
Console.WriteLine(string.Join(",", matches)); // Yank,Yankee
foreach (var matches in A2ToA1lookup["yankeedoodle"])
Console.WriteLine(string.Join(",", matches)); // -- String.Empty --
foreach (var matches in A2ToA1lookup["m"])
Console.WriteLine(string.Join(",", matches)); // MLB
a2[yank]
是a2[yan]
?!这些数组中有多少个字符串?如果这个数字相对较小,那么简单的方法(调用string.Contains
,对a1的每个成员调用,对a2的每个成员调用)将很好地工作。如果一个或两个阵列都非常大,那么您需要更多的参与。
var results = a1.Where(e1 => a2.Any(e2 => e1.ToUpper().Contains(e2.ToUpper())));