提问人:Ouroboros 提问时间:11/17/2020 更新时间:11/17/2020 访问量:35
任意排序对象列表的相等性 kotlin [已关闭]
Equality of lists of arbitrarily ordered objects kotlin [closed]
问:
当对象不容易排序时(例如,它们都是许多不同的类型),检查顺序无关紧要但重复很重要的两个对象列表的相等性是什么?
显然,通过从每个对中删除相等的对直到没有匹配是可行的,但这似乎效率低下。有没有更好的方法?
答:
4赞
Tenfour04
11/17/2020
#1
您可以使用分组和折叠操作,按项目计数有效地将每个列表转换为项目映射。
fun equalIgnoreOrder(a: List<*>, b: List<*>): Boolean {
return a.groupingBy { it }.eachCount() == b.groupingBy { it }.eachCount()
}
评论
0赞
Ouroboros
11/17/2020
对于阅读本文的其他人,也可以用作匹配的哈希码groupingBy { it }.eachCount().hashCode()
0赞
Tenfour04
11/17/2020
哈希码不是双向的。两个不相等的对象可以生成相同的哈希值。
0赞
Ouroboros
11/17/2020
我知道?我只是说,当需要列表中的哈希代码时,无论顺序如何,该哈希码都相等但仍然具有最小的重叠,这将很有用
评论