如何识别列表中的任何项是否作为另一个对象列表的元素存在

时间:2016-03-01 18:34:24

标签: c# linq

希望我能够很好地解释这一点以获得答案。我想要做的,最好使用linq,是识别字符串列表中的任何项是否作为另一个对象列表中的元素存在。这是一个非常通用的例子。

列表1 {" A"," B"," C"," D"}

列表2包含例如1的配对对象," A"和2," Z"和3," F"。

我想要发现的是,列表1中的任何字符串是否作为列表2的第二个元素存在.AKA列表2中的第一个项目是真的,因为" A"也列在清单1中。

有没有办法用linq完成这个?

3 个答案:

答案 0 :(得分:2)

假设list2是KeyValuePairs的集合,如Dictionary或Hashtable:

list2.Any(i=>list1.Contains(i.Value))

虽然根据你的陈述"列表2中的第一项是真的,因为" A"也列在清单1中。"听起来你想要一个"副本" List2的一个布尔值,它们是否存在于List1中。那将是:

list2.Select(i=>new {item=i, exists=list1.Contains(i.Value)});

答案 1 :(得分:1)

如果你想从list1开始:

v.getY() - v.getHeight()

答案 2 :(得分:1)

如果我了解您正在寻找的内容,您可能需要GroupJoin,以确定一个列表中的项目是否在第二个列表中有一个或多个匹配项。

因此,对于您的特定问题:

var letters = new[] { "A", "B", "C", "D" };

var pairs = new[]
{
    new { Id = 1, Letter = "A" },
    new { Id = 2, Letter = "Z" },
    new { Id = 3, Letter = "F" }
};

var result = letters.GroupJoin(
    pairs, // join letters with pairs
    x => x, // use the whole letter as the matching key
    y => y.Letter, // use the Letter property as the matching key
    (x, ys) => new { Letter = x, Exists = ys.Any() }); // yield true if there are any matches, otherwise false