gpt4 book ai didi

c# - 使用 lambda 从嵌套列表中分离值

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:16 24 4
gpt4 key购买 nike

我有一个包含文档组列表的文档列表,我想选择所有不同的文档组来执行操作。遍历 2 个循环是微不足道的,但我无法找到如何使用 lambda 表达式执行此操作。谁能提供一些帮助?

那些是类

public class Document
{
public int DocumentID {get; set;}

public string DocumentName {get; set;}

public List<DocumentGroup> DocumentGroups { get; set; }
}

public class DocumentGroup : IEquatable<DocumentGroup>
{
public int DocumentGroupID { get; set; }

public string GroupName { get; set; }

public bool Equals(DocumentGroup other)
{
if (other == null)
return false;

return other.DocumentGroupID == this.DocumentGroupID;
}
}

这是简单的代码

List<DocumentGroup> distinctDocumentGroups = new List<DocumentGroup>();

foreach (Document d in documentList)
{
foreach(DocumentGroup dg in d.DocumentGroups)
{
if (!distinctDocumentGroups.Contains(dg))
distinctDocumentGroups.Add(dg);
}
}

谢谢,莱安德罗·塔瓦雷斯

最佳答案

我怀疑您只是想要 [SelectMany] 1 的组合(将文档列表展平为文档组序列)然后 Distinct获取不同的元素:

var documentGroups = documentList.SelectMany(d => d.DocumentGroups)
.Distinct()
.ToList();

如 Servy 所述,您还需要覆盖 DocumentGroup 中的 GetHashCode。在这种情况下,这是微不足道的:

public override int GetHashCode()
{
return DocumentGroupId;
}

另请注意,让 DocumentGroupId 可变 成为平等的关键令人担忧。如果可以,请将其更改为不可变的并将 ID 传递给构造函数。

关于c# - 使用 lambda 从嵌套列表中分离值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22562875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com