[英]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
有任何重復項,第一行將引發異常。
someElements.All(e => allElements.Contains(e));
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.