C#将两个属性合并到一个列表中并过滤唯一值

Dun*_*Luk 2 c# linq algorithm data-structures

为了解释我的问题,我用a创建了这个简化的例子BookBundle,其中包含两个Books:

public class BookBundle
{
    public Book Book1 { get; }
    public Book Book2 { get; }
}
Run Code Online (Sandbox Code Playgroud)

但是现在我有很多BookBundles,但我不知道Book我的库里有哪些独特的东西.为此,我创建了一个函数:

public static Book[] GetUniqueBooks(BookBundle[] bundles)
{
    // Return all unique books
}
Run Code Online (Sandbox Code Playgroud)

实现此功能的最有效方法是什么?可能有一些我可以使用的Linq功能,或者我应该使用ListDictionary跟踪我在循环时找到的哪些独特项目?哪个是最快的(最低的算法复杂度)?

Vid*_*kas 5

您可以使用SelectManySystem.Linq.

bundles.SelectMany(b => new Book[] {b.Book1, b.Book2}).Distinct();
Run Code Online (Sandbox Code Playgroud)