我在dart中遇到了一段代码
id.hashCode <= peerId.hashCode
我了解支票==
,但是小于或大于哈希码如何工作。控制台仅打印出不同的数字。这些数字代表什么,可以与<=
和>=
**编辑:-向问题中添加上下文**
用例是通过散列用户Firebase uid's
并创建类似这样的字符串来方便2个用户写入Firestore中的相同节点
if (currentId.hashCode <= peerId.hashCode) {
groupChatId = '$currentId-$peerId';
} else {
groupChatId = '$peerId-$currentId';
}
只需利用hashcode
是integer
且唯一的事实
答案 0 :(得分:2)
扑朔迷离的哈希码实际上只是一个整数。因此,当您将哈希码与具有<或>的哈希码进行比较时,您正在做的是比较一个哈希码的整数值是否大于另一个哈希码。我想不出任何实际用途,因为哈希码通常用于验证对象是否正是您想要的。
取决于计算哈希码的实现方式,一个哈希码可能大于另一个哈希码可能会有一些含义,但我想不出任何使用哈希码而不是您想要的特定属性都会受益的实际用例比较。
答案 1 :(得分:1)
我猜这个问题与这篇文章https://medium.com/flutter-community/building-a-chat-app-with-flutter-and-firebase-from-scratch-9eaa7f41782e有关。我和 OP 有同样的问题,我有一个恍惚的时刻,因此分享了我得到的东西。
hashCode
属性只返回一个类似 的数字。所以假设两个用户 A
和 B
正在聊天,所以为了获取 A(例如,hashCode=11)和 B(例如,hashCode=22)之间的消息,这必须存储在相同的 firestore 集合,为此我们需要一个唯一的 id(groupChatId
)。如果我们仅通过 groupChatId
'$curentId-$peerId'
创建 groupChatId
(此处 groupChatId 用作 firestore 集合的键)对于 A 和 11-22
将是 22-11
对于 B,这将导致两个集合。相反,如果我们使用以下逻辑:
if (currentId.hashCode <= peerId.hashCode) {
groupChatId = '$currentId-$peerId';
} else {
groupChatId = '$peerId-$currentId';
}
groupChatId
对于 A 和 B 都是 11-22
,因此可以使用相同的 Firestore 集合进行写入和读取。