Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可枚举方法,如Intersect()和部分比较_C# - Fatal编程技术网

C# 可枚举方法,如Intersect()和部分比较

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 =

C#代码:

我想在a1中搜索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())));