go语言中 我想通过sort包排序 前端传来两个参数,如果第一个参数discount为true就按照discount排序,如果第二个参数price为true就按照第二个排序
时间: 2024-11-22 15:37:52 浏览: 4
批处理命令教学之字符串排序(sort)
在Go语言中,如果你想使用`sort`包对数据进行排序,并根据前端传来的参数动态选择排序依据,你可以创建一个自定义的比较函数(`func() Less`)。这个函数通常接收两个元素作为输入,并根据当前的排序规则返回`true`或`false`。
例如,假设你有一个`type Item struct { Price float64; Discount bool }`的数据结构,可以这样做:
```go
package main
import (
"fmt"
"sort"
)
type ByDiscount []Item
type ByPrice []Item
func (d ByDiscount) Len() int { return len(d) }
func (d ByDiscount) Swap(i, j int) { d[i], d[j] = d[j], d[i] }
func (d ByDiscount) Less(i, j int) bool { return d[i].Discount < d[j].Discount }
func (p ByPrice) Len() int { return len(p) }
func (p ByPrice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func (p ByPrice) Less(i, j int) bool { return p[i].Price < p[j].Price }
func SortItems(items []Item, sortBy string, useDiscount bool) {
switch sortBy {
case "discount":
if useDiscount {
sort.Sort(ByDiscount(items))
} else {
sort.Sort(ByPrice(items))
}
case "price":
sort.Sort(ByPrice(items))
default:
fmt.Println("Invalid sort parameter")
}
}
func main() {
items := []Item{{Price: 10.5, Discount: true}, {Price: 8.9, Discount: false}}
SortItems(items, "discount", true)
fmt.Println(items) // 根据discount排序
SortItems(items, "price", false)
fmt.Println(items) // 根据price排序
}
```
在这个例子中,`SortItems`函数会根据`sortBy`参数和`useDiscount`布尔值动态地决定调用哪种排序方式。如果`sortBy`是"discount"并且`useDiscount`为`true`,那么就按照`discount`字段排序;如果是"price",则按照`price`字段排序。
阅读全文