我有两个List<T>
对象(其中T
两个对象的类型相同),并且我需要能够确定它们是否包含相同的值集,即使这些值的顺序不同。
这些对象是否有任何内置机制来完成此任务,或者我是否需要编写自己的算法?
或者也许,我应该使用不同类型的集合,而不是List<T>
?
如果我要编写自己的算法,它可能包括以下步骤 - 如果我走这条路,我将尝试在最终版本中优化它:
- 这两个集合包含相同数量的值吗?如果没有返回 false。
- 计算每个值在每个集合中出现的次数,如果计数不相等则返回 false。
- 如果我到达两个集合的末尾并且值计数没有任何不平等,则返回 true。
我知道对此有一些警告,例如 T 必须具有可比性 - 我现在使用默认比较(例如.Equals()
) 并为泛型类型定义适当的约束。
根据现有信息,我怀疑支持重复的最有效的解决方案是
- 比较两个列表的大小。如果不相等,则返回 false。如果相等,
- 对两个列表进行排序。如果必须保留原始列表的顺序,请对列表的副本进行排序。
- 比较排序列表每个位置的元素,如果给定位置的值不相等,则返回 false。如果比较了所有元素但未发现差异,则返回 true。
请注意,我假设在此操作期间有足够的内存可用于创建列表的排序副本(如果需要保留顺序)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)