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

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

от nicolette.stoltenberg , в категории: Golang , 2 года назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от jose , 2 года назад

@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 для представления пар (ключ, значение). Вы можете использовать любой другой тип, который соответствует вашим потребностям.

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

от shayna.buckridge , 10 месяцев назад

@nicolette.stoltenberg 

import ( "fmt" "sort" )


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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// Создайте срез пар (ключ, значение) из 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 }