sorting - 在 Golang 中使用 map

标签 sorting dictionary go

我是围棋新手,正在做一些练习。其中之一是按频率从最频繁到最不频繁对数组中的数字进行排序。

Example: 
Input: [2, 2, 5, 7, 4, 4, 4, 7, 2]
Output: [2, 4, 7, 5]

请注意 [4, 2, 7, 5] 也是正确的,因为 4 和 2 具有相同的频率。

为此,我将数组转换成一个value value 映射,这里看起来像这样:[2:3][4:3][7:2][ 5:1](2 和 3 的频率为 3,7 的频率为 2,...)

之后我想简单地遍历 map 并输出按排序的。为此,我使用了以下代码,这显然不起作用。为什么?

count := 0
max := -1

// break loop, if map is empty
for i := 0; i < 1; i-- {
    if len(m) == 0 {
        break
    }

    max = -1

    // get key of biggest value
    for k, v := range m {
        if v > max {
            max = k
        }
    }
    // res (for result) is a slice of integers
    res[count] = max
    // remove key-value-pair from map
    delete(m, max)
    count++
}
return res

请记住这是一个练习。我非常确定有更好的方法可以做到这一点。

最佳答案

您的“最大”变量旨在跟踪目前看到的最大频率。但是,当您执行“max = k”时,您正在分配一个键。

您需要在单独的变量中跟踪最大频率和与该频率关联的键。

...
for k, v := range m {
    if v > maxFreq {
        maxFreq = v
        mostFrequentKey = k
    }
}
// res (for result) is a slice of integers
res[count] = mostFrequentKey
// remove key-value-pair from map
delete(m, mostFrequentKey)
count++
...

关于sorting - 在 Golang 中使用 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49058063/

相关文章:

sql - postgres go lib pq ","附近的语法错误

java - Stream sorted() 导致意外结果

mysql - 在 MySQL 中对 varchar 字段进行数字排序

python - 使用python对列表进行排序

python - 为什么我不能在迭代另一个字典时修改一个字典(获取更改大小错误)?

go - 在 Golang 中将字符串放在两个 % 之间

python - 如何对列表进行排序首先写入相同的元素,然后按升序排列

dictionary - 为什么 Map 不适用于 Groovy 中的 GString?

python - 如果有重复的键,python 字典理解总是 "last wins"

go - GORM:通用运算符