2015-04-17 2 views
0

Я знаю, как сортировать ключ/значение с типом данных:Сортировать пара в GoLang

map[1:a 2:c 0:b] 

используя sort пакет GoLang. Как я могу сортировать Pair как следующее:

[{c 2} {a 1} {b 0}] 

Я хочу, чтобы все пары, чтобы быть отсортирован в соответствии с ключом или значение? Конечный результат:

[{a 1} {b 0} {c 2}] 

все сортировано согласно ключам. Ниже отсортирован по значениям:

[{b 0} {a 1} {c 2}] 

ответ

3

Вы могли бы реализовать Len, Swap и Less для пользовательского типа. Пример приведен здесь: https://gobyexample.com/sorting-by-functions

Вот как можно отсортировать по ключу для примера: http://play.golang.org/p/i6-e4I7vih

import (
    "fmt" 
    "sort" 
) 

type Pair struct { 
    Key string 
    Value int 
} 

type ByKey []Pair 

func (s ByKey) Len() int { 
    return len(s) 
} 

func (s ByKey) Swap(i, j int) { 
    s[i], s[j] = s[j], s[i] 
} 

func (s ByKey) Less(i, j int) bool { 
    return s[i].Key < s[j].Key 
} 

func main() { 
    pairs := []Pair{{"a", 1}, {"b", 0}, {"c", 2}} 
    // Sort by Key 
    sort.Sort(ByKey(pairs)) 
    fmt.Println(pairs) // [{a 1} {b 0} {c 2}] 
} 
+0

Я не хочу сортировать ключ/значение в отдельности и отображать их, я хочу всю пару для сортировки вместе. См. Мое редактирование. – user2567857

+0

@ user2567857, я считаю, что понял вас. Я добавил ссылку на пример моего ответа. – miku

+1

Incase, каждый хочет знать, как сортировать в соответствии с 'value', просто измените' s [i] .Key' и 's [j] .Key' to' s [i] .Value' и 's [i] .Value' соответственно. – user2567857

Смежные вопросы