确定两个 List 对象是否包含同一组值(即使它们的顺序不同)的最佳方法是什么? [复制]

2024-02-26

我有两个List<T>对象(其中T两个对象的类型相同),并且我需要能够确定它们是否包含相同的值集,即使这些值的顺序不同。

这些对象是否有任何内置机制来完成此任务,或者我是否需要编写自己的算法?

或者也许,我应该使用不同类型的集合,而不是List<T>?

如果我要编写自己的算法,它可能包括以下步骤 - 如果我走这条路,我将尝试在最终版本中优化它:

  • 这两个集合包含相同数量的值吗?如果没有返回 false。
  • 计算每个值在每个集合中出现的次数,如果计数不相等则返回 false。
  • 如果我到达两个集合的末尾并且值计数没有任何不平等,则返回 true。

我知道对此有一些警告,例如 T 必须具有可比性 - 我现在使用默认比较(例如.Equals()) 并为泛型类型定义适当的约束。


根据现有信息,我怀疑支持重复的最有效的解决方案是

  • 比较两个列表的大小。如果不相等,则返回 false。如果相等,
  • 对两个列表进行排序。如果必须保留原始列表的顺序,请对列表的副本进行排序。
  • 比较排序列表每个位置的元素,如果给定位置的值不相等,则返回 false。如果比较了所有元素但未发现差异,则返回 true。

请注意,我假设在此操作期间有足够的内存可用于创建列表的排序副本(如果需要保留顺序)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定两个 List 对象是否包含同一组值(即使它们的顺序不同)的最佳方法是什么? [复制] 的相关文章

随机推荐