比较两个通用列表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&lt;string&gt;(我假设-我看不到您的代码)?另外,请更准确地指定规则。例如,如果列表 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#的最快方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

基于嵌套列表中包含的 id 元素比较两个通用列表的最有效方法 (C#)

.NET CORE下最快比较两个文件内容是否相同的方法

在Java中比较两个集合的最快方法是什么?

在 C# 中查找两个集合的补集的最快方法

在python中合并两个列表的最快方法是啥?

比较两个字节数组的最快方法是啥?