【问题标题】:Best way to compare list of tuples比较元组列表的最佳方法
【发布时间】:2018-03-02 14:20:38
【问题描述】:

我有两个来自不同来源的列表,检查两个列表是否包含相同项目的最佳方法是什么?顺序不重要

List<Tuple<string, string, string>> list1;
List<Tuple<string, string, string>> list2;

【问题讨论】:

  • 所以你的支票应该返回true,如果它们包含完全相同的项目但可能以不同的顺序?或者如果一个人有更多的项目就可以了吗?
  • “最佳”方式只是您可以决定的事情,而不是我们。您是否尝试过自己解决这个问题?你尝试了什么?请出示该代码,我们不会为您编写。
  • @RenéVogt 但是,字符串和元组之间是有区别的。但我同意一般做法是一样的,你只需要提供一个比较器
  • @FlorianKoch 但这里的区别并不重要,元组的默认相等比较器对其所有元素使用默认相等比较器。这里的问题只是如何比较列表,列表元素的类型并不重要。

标签: c#


【解决方案1】:

你可以使用!Except.Any:

bool same = list1.Count == list2.Count && !list1.Except(list2).Any();

解释:

  1. 检查两个列表是否有相同的Count,否则你知道它们不包含相同的
  2. 然后检查ExceptAny,如果您从list1 中“删除”list2,是否有remeaining 元组。如果有Any(至少一个)你知道它们不包含相同的

之所以有效,是因为元组覆盖了GetHashCode(也像匿名类型一样)和string

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
相关资源
最近更新 更多