好的。现在这个问题可能会让你觉得奇怪,但我必须解决它。现在问题很简单。让我用一个很好的例子来解释
假设我有以下字符串列表。每行都是一个列表,这些列表将是合乎逻辑的
my,car,fly,surf,buy
house,home,car,fly,buy
fly,king,rock,buy,sell
fly,buy,home,rock,sell
好吧,如果你在逻辑上和上面列出的结果将是
fly,buy
因为这些是这些列表中唯一相同的元素。现在我如何使用C#4.0实现这种最快的运行时间?谢谢
c#,c#-4.0
答案 0 :(得分:6)
您可以使用LINQ提供的Intersect方法。例如:
List<string> a = new List<string>() {"my","car","fly","surf","buy"};
List<string> b = new List<string>() {"house","home","car","fly","buy" };
var c = a.Intersect(b);
给予汽车,飞行和购买。在c
上对其余字符串重复交集以获得完整的交集。
答案 1 :(得分:1)
List<List<string>> lists = //whatever
HashSet<string> set = new HashSet<string>(lists[0]);
for(int i = 1; i < lists.Count; i++)
{
set.IntersectWith(lists[i]);
}
使用linq你可以使用:
var intersection = lists.Aggregate((l1, l2) => l1.Intersect(l2).ToList());
答案 2 :(得分:1)
您可以使用HashSet<T>
:
IEnumerable<T> IntersectAll(IEnumerable<T> lists)
{
var set = new HashSet<T>(lists.First());
foreach (var other in lists.Skip(1))
{
set.IntersectWith(other);
}
return set;
}