从引用列表中查找列表中的副本

Kri*_*s-I 4 .net c# linq c#-4.0

我想知道listA中是否至少有一个listRef元素出现多次?其他值可以不止一次出现.

List<string> listA = new List<string> { "A", "A", "B", "C", "D", "E" };
List<string> listRef = new List<string> { "B", "D" };
Run Code Online (Sandbox Code Playgroud)

谢谢,

mat*_*mmo 5

试试这个:

bool hasRef = listref.Any(r => listA.Count(a => a == r) > 1);
Run Code Online (Sandbox Code Playgroud)

  • @GY:这里的性能不是由于编译,而是由于`listA`可能会被重复迭代.但最终结果取决于输入的大小 - 对于小型列表,这仍然比其他任何东西都快,就像排序小型列表一样,选择排序比快速排序更快. (2认同)

Mar*_*zek 5

我会首先使用ToLookup方法生成Lookup<string, string>,然后用它来检查你的状况:

var lookup = listA.ToLookup(x => x);
return listRef.Any(x => lookup.Contains(x) && lookup[x].Count() > 1);
Run Code Online (Sandbox Code Playgroud)

您可以使用GroupByToDictionary实现相同的目标:

var groups = listA.GroupBy(x => x).ToDictionary(g => g.Key, g => g.Count());
return listRef.Any(x => groups.ContainsKey(x) && groups[x] > 1);
Run Code Online (Sandbox Code Playgroud)

  • 有一个错字`lookup.Containt(Contains)`应该是`lookup.Contains(x)` (2认同)