gpt4 book ai didi

c# - 从匹配两个单独的 List 中获取 List

转载 作者:行者123 更新时间:2023-11-30 13:15:19 26 4
gpt4 key购买 nike

所有,我想知道是否有更好的方法来获得List<T>来自两个独立 List<T> 的匹配值秒。

如果我想在字符串列表 itemList<string> 中找到所有项目,我目前会这样做(一个不同的列表)在另一个列表中 bankList<string> (也是不同的,所以返回的列表也是不同的 - 没有重复)将是

List<string> matchingList = new List<string>();
foreach (string s in itemList)
if (bankList.Contains(s))
matchingList.Add(s);

有更好和/或更快的方法吗?

扩展:我很高兴这个问题得到了回答(这是在利用)但出于兴趣,获得否定的最好方法是什么(即那些不在 bankList<string> 中的项目) )成为

List<string> interList = new List<string>();
interList = itemList.Intersect(bankList).ToList<string>();
matchingList = itemList.Except(interList).ToList<string>();

或者在这种情况下会回到

List<string> matchingList = new List<string>();
foreach (string s in itemList)
if (!bankList.Contains(s))
matchingList.Add(s);

我认为在这种情况下,有趣的是可能是后者?

最佳答案

有一种更清晰的方法可以做到这一点:

var matchingList = itemList.Intersect(bankList).ToList();

而且,它会更快,因为它不会是O(n^2)。现在,您正在为 itemList 中的每个项目遍历 bankList。相反,您应该从 itemList 构建一个 HashSet,然后在遍历 bankList 时检查该 HashSet 中的内容.这正是Enumerable.Intersect会做的。

因此,您在两个方面都获胜:性能和可读性。

would the best way of getting the negation (that is, those items not in bankList) be

随便说说

var except = itemList.Except(bankList).ToList();

关于c# - 从匹配两个单独的 List<T> 中获取 List<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945988/

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