Как отсортировать map[string]int по значению в golang?

Пользователь

от nicolette.stoltenberg , в категории: Golang , 8 месяцев назад

Как отсортировать map[string]int по значению в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jose , 7 месяцев назад

@nicolette.stoltenberg 

В Golang map не является упорядоченной структурой данных, поэтому вы не можете сортировать map напрямую. Однако, вы можете создать срез из map и отсортировать срез.


Вот пример, который показывает, как отсортировать map[string]int по значению:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
    "fmt"
    "sort"
)

func main() {
    m := map[string]int{
        "apple": 10,
        "banana": 20,
        "cherry": 30,
    }

    // Создайте срез пар (ключ, значение) из map.
    var pairs []Pair
    for k, v := range m {
        pairs = append(pairs, Pair{k, v})
    }

    // Определите функцию Less для типа Pair, чтобы sort мог отсортировать его по значению.
    sort.Slice(pairs, func(i, j int) bool {
        return pairs[i].Value < pairs[j].Value
    })

    // Выведите отсортированный срез.
    for _, p := range pairs {
        fmt.Println(p.Key, p.Value)
    }
}

type Pair struct {
    Key string
    Value int
}


В этом примере мы создаем срез из пар (ключ, значение) в map, используя цикл for и функцию append. Затем мы определяем функцию Less для типа Pair, чтобы sort мог отсортировать срез по значению. Наконец, мы выводим отсортированный срез в цикле for.


Заметьте, что в этом примере мы используем тип Pair для представления пар (ключ, значение). Вы можете использовать любой другой тип, который соответствует вашим потребностям.