c# - 比较两个列表的重复项
问题描述
我有两个清单:
public static List<string> SalesAuthorityListFromFiles = new List<string>();
public static List<(string UserName, string LegalCompany, string SalesAuthorities)> ListOfSalesAuthorities = new List<(string UserName, string LegalCompany, string SalesAuthorities)>();
我正在尝试建立一个新列表以获取“已删除的销售机构”:
var SalesAuthorityThatNotMatch = SalesAuthorityListFromFiles.Where(x => !ListOfSalesAuthorities.Contains(x)).ToList();
我收到一个错误x
,我明白为什么,但我不确定如何解决它:
严重性代码描述项目文件行抑制状态错误 CS1503 参数 1:无法从“字符串”转换为“(字符串用户名,字符串 LegalCompany,字符串 SalesAuthorities)”
我需要加入string UserName, string LegalCompany, string SalesAuthorities
一个字符串才能与SalesAuthorityListFromFiles
值进行比较:
string.Format(@"{0} / {1} : {2}.00 €", UserName, LegalCompany, SalesAuthorities)
但是我怎样才能对中的值进行比较SalesAuthorityListFromFiles
?
解决方案
更改Contains
为Any
然后您可以在比较之前格式化每个元组:
var salesAuthorityThatNotMatch = SalesAuthorityListFromFiles
.Where(x => !ListOfSalesAuthorities
.Any(y => $"{y.UserName} / {y.LegalCompany} : {y.SalesAuthorities}.00 €" == x))
.ToList();
您也可以创建一个HashSet<string>
格式化元组,这将使用更多内存,但会提高 LINQ 查询的效率:
var salesAuthoritiesFormatted = ListOfSalesAuthorities
.Select(y => $"{y.UserName} / {y.LegalCompany} : {y.SalesAuthorities}.00 €")
.ToHashSet();
然后HashSet<string>.Contains
将以O(1)
时间复杂度工作:
var salesAuthorityThatNotMatch = SalesAuthorityListFromFiles
.Where(x => !salesAuthoritiesFormatted.Contains(x))
.ToList();
推荐阅读
- excel - 从外部工作表复制一组数据,包括隐藏行
- elasticsearch - 如何通过修改 Elasticsearch 源码来更改 Elasticsearch 文档源内容?
- arrays - Julia:更快的矩阵计算
- c# - 类别 - 带有 dapper 和 SQL Server 的子类别列表
- mysql - 比较 SQL 中的两个 COUNTS
- matplotlib - 努力导入 matplotlib.pyplot
- javascript - 如何在javascript中将实际时间转换为时间戳
- java - 我如何遍历目录中存在的所有文件并使用 ant 中的正则表达式将匹配替换为所有文件中的文本
- angular - 如何将 NgIf 与字符串插值选择器一起使用?
- ios - SwiftUI - 仅动画视图位置