任意排序对象列表的相等性 kotlin [已关闭]

Equality of lists of arbitrarily ordered objects kotlin [closed]

提问人:Ouroboros 提问时间:11/17/2020 更新时间:11/17/2020 访问量:35

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

3年前关闭。

当对象不容易排序时(例如,它们都是许多不同的类型),检查顺序无关紧要但重复很重要的两个对象列表的相等性是什么?

显然,通过从每个对中删除相等的对直到没有匹配是可行的,但这似乎效率低下。有没有更好的方法?

列出 Kotlin 平等

评论


答:

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
我知道?我只是说,当需要列表中的哈希代码时,无论顺序如何,该哈希码都相等但仍然具有最小的重叠,这将很有用