-1

我有一个字符串列表。我想获取与其他列表匹配的列表项。即,如果 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 的数据

4

2 回答 2

2

这应该可以解决问题:

var res = fileToMatch
    .Where(f => fileNameToMatch.Any(fn => f.IndexOf(fn) >= 0))
    .ToList();

这几乎是不言自明的:您正在查找所有文件ffileToMatch使得文件名fn存在于fileNameToMatchwheref包含在任何地方fn的子字符串中。

编辑:(回应评论)要与fn一起f,添加 aSelect并使用匿名类型,如下所示:

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);
}
于 2013-06-28T10:38:30.327 回答
1

这应该有效:

var result = fileToMatch.Where(x => fileNameToMatch.Any(y => x.Contains(y)));
于 2013-06-28T11:01:36.513 回答