我有一个字符串列表。 我想获得与其他列表匹配的列表项。 即,如果First List值包含来自其他字符串的值,则返回所有值。
List<string> fileNameToMatch = new List<string> { "nsevar", "cat", "elm", "nse isin", "l6scripsv2eq" };
List<string> fileToMatch = new List<string> { "fevnsevarc", "gfcatgf","ratstts","mymatch"};
第二个列表包含第一个列表中的值。 所以返回所有值。
输出应该是列表中的“fevnsevarc”和“gfcatgf”。
我们可以使用一些链接从fileToMatch获取包含来自fileNameToMatch
的数据的名称答案 0 :(得分:2)
这应该可以解决问题:
var res = fileToMatch
.Where(f => fileNameToMatch.Any(fn => f.IndexOf(fn) >= 0))
.ToList();
这几乎是不言自明的:您正在寻找f
中的所有文件fileToMatch
,以便在fn
fileNameToMatch
中存在文件名f
fn
}被包含在fn
中作为子字符串的任何位置。
编辑(回复评论)要获取f
以及Select
,请添加var res = fileToMatch
.Where(f => fileNameToMatch.Any(fn => f.IndexOf(fn) >= 0))
.Select(f => new {
File = f
, Name = fileNameToMatch.First(fn => f.IndexOf(fn) >= 0)
})
.ToList();
foreach (var match in res) {
Console.WriteLine("{0} - {1}", match.File, match.Name);
}
,并使用匿名类型,例如这样:
{{1}}
答案 1 :(得分:1)
这应该有效:
var result = fileToMatch.Where(x => fileNameToMatch.Any(y => x.Contains(y)));