比较两个通用列表C#的最快方法[关闭]
Posted
技术标签:
【中文标题】比较两个通用列表C#的最快方法[关闭]【英文标题】:Quickest way to compare two generic lists C# [closed] 【发布时间】:2020-12-21 22:24:46 【问题描述】:我需要知道比较两个列表的最佳方法是什么,例如:
var list1 = new List<string> "ITEM", "FROM", "TO", "X kg/cm2g", "Y kg/cm2g" ;
var list2 = new List<string> "ITEM", "TO", "FROM", "Y", "X" ;
然后,我在列表 2 中的项目存在于列表 1 中,在这种情况下是正确的,因为我只需要知道列表 1 中的项目是否包含列表 2。
例如
"ITEM"
存在
"TO"
存在
"FROM"
存在
Y
存在是因为“Y kg/cm2g”
X
存在是因为“X kg/cm2g”
【问题讨论】:
嗨,欢迎来到 ***。请提供您迄今为止尝试过的代码示例。 请更新您的问题,尽您最大的努力自己解决这个问题,并解释为什么它不符合您的性能/速度标准。 而且,generic
部分在哪里出现在您的问题中;您的示例似乎使用了两个List<string>
(我假设-我看不到您的代码)?另外,请更准确地指定规则。例如,如果列表 1 包含 "Steve Young"
,而列表 2 包含 "Y"
,它会算作匹配吗?如果反过来呢?
您真的对最快的方法感兴趣吗?或只是一个解决方案...如果您对“最快的方式”感兴趣,您需要解释这是如何使用的,列表更改的频率,并将其与您知道的某种实际工作方式进行比较...即与什么相比最快?手指和脚趾?
【参考方案1】:
听起来您正在尝试验证list2
中的所有项目是否包含在list1
中的至少一项中。如果是这样的话,这应该可以解决问题:
bool list1ContainsList2Items = list2.All(l2 => list1.Any(l1 => l1.Contains(l2)));
【讨论】:
您能解释一下为什么这是最快的吗? @devlincarnate,因为它的编写时间不到一分钟,而且比 op 的当前解决方案更快,这没什么。 :) 如果您想花时间为这个问题优化解决方案,请成为我的客人!【参考方案2】:您可以将列表 1 中的项目连接到一个大字符串并循环检查它是否包含列表 2 中的项目。
【讨论】:
既然 OP 要求“最快”,您能否评论一下您的解决方案的时间复杂度? 通过简单的串联 ( "LOUIS", "TAN" ) 和 ( "LOU", "IS", "STAN" ) 产生有趣的结果。你打算分隔字符串吗?您将如何处理包含分隔符的字符串?以上是关于比较两个通用列表C#的最快方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章