【发布时间】:2016-05-25 13:05:54
【问题描述】:
Golang 中的 map 如何比较键?出于某种原因,我需要一个结构作为键,其中有 2 个值。我希望地图仅按第一个值进行比较,而不是第二个。二是供我使用。就像在 java 中一样,我可以自定义 equals 方法,所以 map 只需要 logically equal 里面的键。有什么办法吗?
编辑:看起来没有办法做到这一点。所以我现在把我的问题放在这里。请帮助我以“Go-way”的方式思考。
所以,我想实现一个“定时映射”,它跟踪键插入时间。换句话说,有一个地图可以接受和处理这些值。现在,如果地图中的数据早于某个特定的时间间隔,那么我应该将其清除。
所以,我想到了一个具有 id 和时间戳的键结构。当一个新键到来时,map 会使用 id 和 currentTimeInMillis 来获取它。过了一段时间,如果一个已经存在的键出现,那么 map 应该保留第一个插入时间并且只更新值数组。
为了处理,我将循环映射并检查是否有任何特定键在内部超过阈值限制,然后我将其清除。我可以在值数组中有这个时间戳,但它也有自己的时间戳,所以再放一个可能会混淆其他人。
请提出一些建议。
【问题讨论】:
-
不,您无法更改地图的散列方式。
-
哦,那是个坏消息。我需要找到一些替代方案。 Golang 非常“有限”。 :-(
-
@theGamblerRises 不受限制。你想让我做什么?不要在 golang 中实现 java 代码。
-
看起来只有 ID 是一个键,时间戳是一个值,应该作为值存储。我看不出有什么理由必须将它们都放入一个结构并将其用作映射键
-
你也可以使用优先队列:stackoverflow.com/q/6644688/124319
标签: dictionary go hashtable