首页 文章

LINQ对List中特定属性的Distinct()

提问于
浏览
-1

因此,当我看到有时会有重复的单词时,我正在为儿童制作阅读游戏 . 所以我想我自己,让我们做一个独特的 . 但它有点复杂 .

所以我理解如何在整数或字符串列表中使用Distinct以及如何在列表中的属性上使用DistinctBy() .

但我无法弄清楚的是如何在对象列表中的字符串列表中的属性上执行此操作 .

B计划是ForEaches的一大部分,但我正在寻找更优雅的东西 .

所以这是结构:

List<MyObject>()
{
    OtherObject BsObject1;
    OtherObject BsObject2;
    List<String>();
}

所以日期看起来像这样:

MyObject1: List<String>: "word1", "word2"
MyObject2: List<String>: "word3", "word4"
MyObject3: List<String>: "word1", "word5"
MyObject4: List<String>: "word5", "word6"

只要1个单词在任何其他列表中,该单词就可以被删除 .

有任何想法吗?

1 回答

  • 0

    基于您的问题,我假设在您的示例中,唯一剩下的对象是MyObject2,因为word1存在于对象1和3中,而word5存在于对象3和4中 .

    List<MyObject> objects; // Populate your data here... Strings is the name of the List<String> property.
    var distinctObjects = objects.Where(
        mo => !mo.Strings.Intersect(
            objects.Except(new List<MyObject>() { mo }).SelectMany(mobj => mobj .Strings))
        .Any()).ToList();
    

    对于每个项目,此语句检查其字符串列表中的字符串是否包含在所有其他项目中找到的字符串的并集中 . 如果这不是空的(!Any()),那么该项目仍然存在 .

相关问题