如何逻辑和(^,逻辑连接)字符串列表 - C#

时间:2012-02-23 00:21:13

标签: c# string list compare logical-operators

好的。现在这个问题可能会让你觉得奇怪,但我必须解决它。现在问题很简单。让我用一个很好的例子来解释

假设我有以下字符串列表。每行都是一个列表,这些列表将是合乎逻辑的enter image description here

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

3 个答案:

答案 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;
}