Настройте срез на новый порядок - PullRequest
0 голосов
/ 03 мая 2019

У меня есть тип ...

type MyType struct {
    Job       string `json:"Job"`
    Cost      string `json:"Cost"`

}

Срез этого типа ...

var records []MyType

Он заполняется следующим образом ...

records = append(records, MyType{Job: 100, Cost:234},)
records = append(records, MyType{Job: 101, Cost:4000},)
records = append(records, MyType{Job: 102, Cost:700},)

Я бы хотел отсортировать «строки» по убыванию стоимости, чтобы ...

records [0]. Задание равнялось бы 101 records [0]. Cost равнялось бы 4000

records[1]. Задание будет равно 102 записям [1]. Стоимость будет равно 700

записей [2]. Задание будет равно 100 записей [2]. Стоимость будет равно 234

В c # iобычно использует linq, но я новичок в этом и не знаю, как это сделать ...

1 Ответ

2 голосов
/ 03 мая 2019

в первую очередь недействителен тип json. Стоимость должна быть int тип

попробуйте этот код

import (
    "fmt"
    "sort"
)

type Records []MyType

type MyType struct {
    Job  int `json:"Job"`
    Cost int `json:"Cost"`
}

func (r Records) Len() int           { return len(r) }
func (r Records) Swap(i, j int)      { r[i], r[j] = r[j], r[i] }
func (r Records) Less(i, j int) bool { return r[i].Cost > r[j].Cost }

func main() {

    records := make(Records, 0, 1000)
    records = append(records, MyType{Job: 100, Cost: 234})
    records = append(records, MyType{Job: 101, Cost: 4000})
    records = append(records, MyType{Job: 102, Cost: 700})

    sort.Sort(records)
    fmt.Println(records)
}

или без пользовательских ломтиков

type MyType struct {
    Job  int `json:"Job"`
    Cost int `json:"Cost"`
}

func main() {

    records := make([]MyType, 0, 1000)
    records = append(records, MyType{Job: 100, Cost: 234})
    records = append(records, MyType{Job: 101, Cost: 4000})
    records = append(records, MyType{Job: 102, Cost: 700})

    sort.Slice(records, func(i, j int) bool {
        return records[i].Cost > records[j].Cost
    })
    fmt.Println(records)
}

выход

[{101 4000} {102 700} {100 234}]

ref https://golang.org/pkg/sort/#Slice

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...