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

本文关键字:列表 一个对象 元素 存在 是否 何确定 任何项 | 更新日期: 2023-09-27 18:36:53

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

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

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

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

有没有办法使用 linq 实现这一点?

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

假设 list2 是 KeyValuePair 的集合,就像字典或哈希表一样:

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

虽然,根据您的陈述"列表 2 中的第一项是正确的,因为"A"也在列表 1 中",听起来您想要 List2 的"副本",每个副本都有一个布尔值,以确定它们是否存在于 List1 中。那将是:

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

如果你想从list1开始:

bool result = list1.Any(elem => list2.Values.Contains(elem));

如果我明白你要找什么,你可能想要一个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