Как отсортировать структуру по произвольному полю? Всем привет Есть структура type bla-bla struct { a float64 b float64 c float64 d float64 } и есть массив таких структур:func main { var la []bla-bla var la-la bla-bla struct1 := la-la{a: 1.0, b: 3.0, c:3.0, d:1.0} struct2 := la-la{a: 0.0, b: 5.0, c:3.0, d:2.0} struct3 := la-la{a: 8.0, b: 1.0, c:4.0, d:11.0} struct4 := la-la{a: 2.0, b: 0.0, c:3.0, d:7.0} la = append(la, struct1) la = append(la, struct2) la = append(la, struct3) la = append(la, struct4) } как можно их сортировать по нужному мне полю? то есть нужна функция вида:func sort_structs(la-la []Queries, sort_field) { //some_code } к примеру, один раз нужно отсортировать ее по полю a. Другой раз по полю c. И так далее сама функция была написана но для [](map[string]interface{}). Сортирую значения, потом возвращаю соответствующие ключи. Перенес эту функцию на работу со структурой, но беда в том, что не знаю как задавать произвольное поле для сортировки. Если кто сталкивался или знает, подскажите плз
Для сортировки структуры по произвольному полю вы можете использовать интерфейсы и функцию sort.Sort() из стандартной библиотеки Go. Вот пример кода, который показывает как это можно сделать:
В данном примере функция sortStructs() принимает на вход слайс структур и поле, по которому необходимо отсортировать структуры. В зависимости от переданного поля, функция использует метод sort.Slice() для сортировки структур.
Теперь у вас должна правильно отсортироваться структура по нужному полю. Надеюсь, это поможет вам с вашей задачей! Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать.
Для сортировки структуры по произвольному полю вы можете использовать интерфейсы и функцию sort.Sort() из стандартной библиотеки Go. Вот пример кода, который показывает как это можно сделать:
package mainimport (
"fmt"
"sort"
)
type blaBla struct {
a float64
b float64
c float64
d float64
}
type ByField struct {
structs []blaBla
less func(i, j int) bool
}
func (b ByField) Len() int { return len(b.structs) }
func (b ByField) Swap(i, j int) { b.structs[i], b.structs[j] = b.structs[j], b.structs[i] }
func (b ByField) Less(i, j int) bool { return b.less(i, j) }
func sortStructs(la []blaBla, sortField string) {
switch sortField {
case "a":
sort.Slice(ByField{structs: la, less: func(i, j int) bool { return la[i].a < la[j].a }}, func(i, j int) { la[i], la[j] = la[j], la[i] })
case "b":
sort.Slice(ByField{structs: la, less: func(i, j int) bool { return la[i].b < la[j].b }}, func(i, j int) { la[i], la[j] = la[j], la[i] })
case "c":
sort.Slice(ByField{structs: la, less: func(i, j int) bool { return la[i].c < la[j].c }}, func(i, j int) { la[i], la[j] = la[j], la[i] })
case "d":
sort.Slice(ByField{structs: la, less: func(i, j int) bool { return la[i].d < la[j].d }}, func(i, j int) { la[i], la[j] = la[j], la[i] })
}
}
func main() {
var la []blaBla
var struct1 blaBla = blaBla{a: 1.0, b: 3.0, c: 3.0, d: 1.0}
var struct2 blaBla = blaBla{a: 0.0, b: 5.0, c: 3.0, d: 2.0}
var struct3 blaBla = blaBla{a: 8.0, b: 1.0, c: 4.0, d: 11.0}
var struct4 blaBla = blaBla{a: 2.0, b: 0.0, c: 3.0, d: 7.0}
la = append(la, struct1)
la = append(la, struct2)
la = append(la, struct3)
la = append(la, struct4)
fmt.Println("Before sorting:")
fmt.Println(la)
sortStructs(la, "a") // Сортировка по полю "a"
fmt.Println("After sorting:")
fmt.Println(la)
}
В данном примере функция sortStructs() принимает на вход слайс структур и поле, по которому необходимо отсортировать структуры. В зависимости от переданного поля, функция использует метод sort.Slice() для сортировки структур.
Теперь у вас должна правильно отсортироваться структура по нужному полю. Надеюсь, это поможет вам с вашей задачей! Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать.