Если цель состоит в сортировке каждого фрагмента в graph
по стоимости, вам нужно всего лишь реализовать sort.Interface
на []Graph
, а затем использовать цикл for для циклического прохождения значений.
type ByCost []Graph
func (gs *ByCost) Len() int { return len(gs) }
func (gs *ByCost) Less(i, j int) bool { return gs[i].cost < gs[j].cost }
func (gs *ByCost) Swap(i, j int) { gs[i], gs[j] = gs[j], gs[i] }
for _, v := range graph {
sort.Sort(ByCost(v))
Если вы пытаетесь перебирать карты в порядке сортировки по сумме расходов в []Graph
, что будет гораздо меньше чистой.
type GraphKeyPairs struct {
key string
value []Graph
}
// Build a slice to store our map values
sortedGraph := make([]GraphKeyPairs, 0, len(graph))
for k,v := range graph {
// O(n)
gkp := GraphKeyPairs{key: k, value: v}
sortedGraph = append(sortedGraph, gkp)
}
type BySummedCost []GraphKeyPairs
func (gkp *BySummedCost) Len() int { return len(gkp) }
func (gkp *BySummedCost) Swap(i, j int) { gkp[i], gkp[j] = gkp[j], gkp[i] }
func (gkp *BySummedCost) Less(i, j int) bool {
// O(2n)
iCost, jCost := 0, 0
for _, v := range gkp[i].value {
iCost += v.cost
}
for _, v := range gkp[j].value {
jCost += v.cost
}
return iCost < jCost
}
sort.Sort(BySummedCost(sortedGraph))
Непонятно, что означало бы «сортировка карты». Что вы пытаетесь сделать потом? Карты не имеют порядка, поэтому они не сортируются в традиционном смысле. –
[sort package] (https://golang.org/pkg/sort/) имеет несколько примеров. У вас есть вопрос об использовании Sort? – JimB