go中得到以bookID为key,supplier对象为值的map,我想拿到每个bookid下折扣最小的supplier对象 怎么写代码
时间: 2024-10-28 08:06:49 浏览: 18
在Go语言中,你可以使用`map`结构以及`for`循环配合`min`函数来实现这个需求。首先假设你有一个`Supplier`结构体和一个包含`bookID`和`discount`字段的`SupplierBook`结构,代码可能如下所示:
```go
type Supplier struct {
ID int
Name string
// 其他属性...
}
type SupplierBook struct {
BookID int
Discount float64
// 可能还有其他字段...
}
func getMinDiscountSupplier(bookMap map[int]SupplierBook) (map[int]Supplier, error) {
minDiscountSuppliers := make(map[int]Supplier)
for bookID, book := range bookMap {
if _, ok := minDiscountSuppliers[bookID]; !ok {
minDiscountSuppliers[bookID] = Supplier{ID: book.ID} // 假设ID是供应商的主要标识
currentMinDiscount := book.Discount
} else if book.Discount < currentMinDiscount {
minDiscountSuppliers[bookID].Name = book.Supplier.Name // 更新最小折扣的供应商名
currentMinDiscount = book.Discount
}
}
return minDiscountSuppliers, nil
}
// 使用示例
bookData := [...] // 假设这是你的SupplierBook切片或数据库查询结果
bookMap := make(map[int]SupplierBook)
for _, data := range bookData {
bookMap[data.BookID] = data
}
result, err := getMinDiscountSupplier(bookMap)
if err != nil {
// 处理错误
}
fmt.Println(result)
```
这里,我们遍历了bookMap,对于每个bookID找到当前已知的最低折扣,并更新对应的Supplier对象。注意,实际代码中可能需要根据实际情况调整`Supplier`结构或比较字段。最后别忘了检查是否有错误发生。如果你的数据源不是数组而是数据库查询,记得替换为相应的查询和连接步骤。
阅读全文