簡體   English   中英

比較兩個列表與LINQ更好的方法?

[英]Better way of comparing two lists with LINQ?

我有2個收藏夾:

IEnumerable<Element> allElements
List<ElementId> someElements, 

一起執行以下操作的簡潔方式是什么:

[1]驗證someElements中的所有元素都存在於allElements ,當條件失敗時會快速返回。

[2]獲取List<ElementId> someElements映射到的Element對象的List<ElementId> someElements

每個Element對象都有一個ElementId

謝謝。

我會這樣做:

var map = allElements.ToDictionary(x => x.Id);    
if (!someElements.All(id => map.ContainsKey(id))
{
    // Return early
}
var list = someElements.Select(x => map[x])
                       .ToList();

請注意,如果allElements有任何重復項,第一行將引發異常。

  1. someElements.All(e => allElements.Contains(e));
  2. allElements.Where(e => someElements.Contains(e.ElementId));

效率不及Skeet答案,但對於合理大小的集合來說足夠好:

IEnumerable<Element> allElements = new List<Element>
    { new Element { Id = 1 }, new Element { Id = 2 } };
List<int> someElements = new List<int> { 1, 2 };

var query =
    (from element in allElements
    join id in someElements on element.Id equals id
    select element)
    .ToList();

if (query.Count != someElements.Count)
{
    Console.WriteLine("Not all items found.");
}

foreach (var element in query)
{
    Console.WriteLine ("Found: " + element.Id);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM