gpt4 book ai didi

c# - 检查一个 IEnumerable 是否包含另一个 IEnumerable 的所有元素

转载 作者:IT王子 更新时间:2023-10-29 03:36:50 25 4
gpt4 key购买 nike

比较两个集合中每个元素的字段/属性时,确定一个 IEnumerable 是否包含另一个 IEnumerable 的所有元素的最快方法是什么?


public class Item
{
public string Value;

public Item(string value)
{
Value = value;
}
}

//example usage

Item[] List1 = {new Item("1"),new Item("a")};
Item[] List2 = {new Item("a"),new Item("b"),new Item("c"),new Item("1")};

bool Contains(IEnumerable<Item> list1, IEnumerable<Item>, list2)
{
var list1Values = list1.Select(item => item.Value);
var list2Values = list2.Select(item => item.Value);

return //are ALL of list1Values in list2Values?
}

Contains(List1,List2) // should return true
Contains(List2,List1) // should return false

最佳答案

除非您跟踪和维护某种状态来确定一个集合中的所有值是否都包含在另一个集合中,否则没有“快速方法”可以做到这一点。如果你只有 IEnumerable<T>为了对抗,我会使用 Intersect .

var allOfList1IsInList2 = list1.Intersect(list2).Count() == list1.Count();

这样的表现应该是很合理的,因为Intersect()将只枚举每个列表一次。此外,第二次调用 Count()如果底层类型是 ICollection<T> 将是最优的而不仅仅是一个 IEnumerable<T> .

关于c# - 检查一个 IEnumerable 是否包含另一个 IEnumerable 的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3274541/

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