C# 搜索匹配字符串时寻找有效的linq方法
我有一个字符串数组,它有三个字段,分别是field1,field2,field3。 字段1和字段2的长度均为1。字段3的长度可以是0且不受限制,通常为0到6。我想做的是,当给出field1、field2和field3字符串时,在数组中查找匹配的字符串。因为field1和field2的长度都是1,所以它们必须完全匹配。但是对于field3,只要它匹配一个字符,它就匹配 例如:C# 搜索匹配字符串时寻找有效的linq方法,c#,linq,C#,Linq,我有一个字符串数组,它有三个字段,分别是field1,field2,field3。 字段1和字段2的长度均为1。字段3的长度可以是0且不受限制,通常为0到6。我想做的是,当给出field1、field2和field3字符串时,在数组中查找匹配的字符串。因为field1和field2的长度都是1,所以它们必须完全匹配。但是对于field3,只要它匹配一个字符,它就匹配 例如: array[0]="AB:CDE" array[1]="BA:D" array[2]="CA:EFG" a
array[0]="AB:CDE"
array[1]="BA:D"
array[2]="CA:EFG"
array[3]="DE:ABEFG"
若给我三个字段字符串:C、A、FG,那个么它匹配数组[2]
D、 E,B,它匹配数组[3]
如何使用Linq进行搜索?考虑到数组可以是任何格式。
我用的是c#可能是这样的:
var arr = new string[4];
arr[0] = "AB:CDE";
arr[1] = "BA:D";
arr[2] = "CA:EFG";
arr[3] = "DE:ABEFG";
arr.ToList().Where(a => a.Contains("C") & a.Contains("A") & a.Contains("FG")).ToList().ForEach(a => Console.WriteLine(a));
Console.ReadKey();
假设您的密钥的格式相同,这就是您要查找的结果吗?(我不是说这是最优的,只是一个起点) 这是我的解决办法
string field1 = "C";
string field2 = "A";
string field3 = "FG";
var result = array.Where(s => s[0] == field1[0] &&
s[1] == field2[0] &&
s.Substring(2).Contains(field3));
我不知道您希望得到什么样的结果,但这里有一个方法,它返回一个匹配三个字段的模式数组:
string[] Patterns = new[] { "AB:CDE", "BA:D", "CA:EFG", "DE:ABEFG" };
string Field1 = "C";
string Field2 = "A";
string Field3 = "FG";
string[] Results = MatchPatterns(Patterns, Field1, Field2, Field3);
Console.WriteLine("Matching patterns:");
foreach (string r in Results)
Console.WriteLine(r);
private string[] MatchPatterns(string[] patterns, string f1, string f2, string f3)
{
return patterns.Where(c => f1 == c.Substring(0, 1) && f2 == c.Substring(1, 1) && c.Substring(3).Contains(f3)).ToArray();
}
编辑:
重新阅读您的问题,我想知道模式CA:EFG
是否改为CA:EG
是否仍与前三个示例字段匹配?您说过,只要字段3中有一个字符匹配,就应该将其视为匹配
这意味着,如果字段3是FG
,因为模式包含G
,它应该是匹配的
如果这是您想要的功能,请使用以下方法替换上述方法:
private string[] MatchPatterns2(string[] patterns, string f1, string f2, string f3)
{
return patterns.Where(c => f1 == c.Substring(0, 1) &&
f2 == c.Substring(1, 1) &&
c.Substring(3).Any(x => f3.Any(f => f == x))).ToArray();
}
任何类似于
的代码都不起作用
?我是否正确理解此示例数组的每个元素的格式类似于[Field1][Field2]:[Field3]
?这只是一个示例格式。为了给样品。格式可以设置为您喜欢的任何格式。太好了!!MatchPatterns 2方法正是我要寻找的。显然,到目前为止,只有你提供了一个正确的答案。非常感谢。这假设上面提到的[f1][f2]:[f3]
格式正确吗?@Liquid correct,子字符串位置应该更改以适应不同的格式。
private string[] MatchPatterns2(string[] patterns, string f1, string f2, string f3)
{
return patterns.Where(c => f1 == c.Substring(0, 1) &&
f2 == c.Substring(1, 1) &&
c.Substring(3).Any(x => f3.Any(f => f == x))).ToArray();
}