Golang中如何处理Map、JSON和Slice的问题求助
Golang中如何处理Map、JSON和Slice的问题求助 我有这样一个问题陈述
问题陈述:
你正在乘坐从起点A到目的地的铁路路线。你需要在各个站点购买所有不同类型的食物。
所有食物在每个站点可能/可能不都有供应。给定JSON数据,
找出以最低价格获得所有食物的最优方案。你可以从不同站点购买不同的食物。
如果两个站点以相同价格提供相同食物,你需要从第一个站点购买。
输入:
{
"SomePointA": {
"Burger": 15.0,
"Fries": 20.0,
"ColdDrink": 25.0
},
"SomePointB": {
"Burger": 10.0,
"Fries": 15.0,
"ColdDrink": 30.0,
"HotDog": 15.0
},
"Destination": {
"Burger": 30.0,
"Fries": 10.0,
"ColdDrink": 10.0
}
}
输出:
{
"Burger": {"station":"SomePointB", "price": 10},
"Fries": {"station":"Destination", "price": 10},
"ColdDrink": {"station":"Destination", "price": 10},
"HotDog": {"station": "SomePointB", "price": 15}
}
这是我目前编写的代码。我似乎无法创建一个能获得结果的数据结构(比如我知道输出是JSON格式,但似乎无法弄清楚)。另外我还需要遍历每个元素,比较价格然后存储它(理论上我理解,但写不出来)。
import (
"encoding/json"
"fmt"
)
func main() {
data := []byte(`{
"SomePointA": {
"Burger": 15.0,
"Fries": 20.0,
"ColdDrink": 25.0
},
"SomePointB": {
"Burger": 10.0,
"Fries": 15.0,
"ColdDrink": 30.0,
"HotDog": 15.0
},
"Destination": {
"Burger": 30.0,
"Fries": 10.0,
"ColdDrink": 10.0
}
}`)
var result map[string]interface{}
json.Unmarshal([]byte(data), &result)
for s, _ := range result {
res:= result[s].(map[string]interface{})
fmt.Println(res)
}
}
更多关于Golang中如何处理Map、JSON和Slice的问题求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang中如何处理Map、JSON和Slice的问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
以下是针对您问题的Go语言解决方案。代码将解析输入的JSON数据,遍历每个站点和食物价格,找出每种食物的最低价格及其对应站点,并生成所需的输出JSON格式。
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := []byte(`{
"SomePointA": {
"Burger": 15.0,
"Fries": 20.0,
"ColdDrink": 25.0
},
"SomePointB": {
"Burger": 10.0,
"Fries": 15.0,
"ColdDrink": 30.0,
"HotDog": 15.0
},
"Destination": {
"Burger": 30.0,
"Fries": 10.0,
"ColdDrink": 10.0
}
}`)
var input map[string]map[string]float64
err := json.Unmarshal(data, &input)
if err != nil {
fmt.Println("Error unmarshaling JSON:", err)
return
}
type foodInfo struct {
Station string `json:"station"`
Price float64 `json:"price"`
}
bestPrices := make(map[string]foodInfo)
for station, foods := range input {
for food, price := range foods {
current, exists := bestPrices[food]
if !exists || price < current.Price || (price == current.Price && station < current.Station) {
bestPrices[food] = foodInfo{Station: station, Price: price}
}
}
}
output, err := json.MarshalIndent(bestPrices, "", " ")
if err != nil {
fmt.Println("Error marshaling output JSON:", err)
return
}
fmt.Println(string(output))
}
输出结果:
{
"Burger": {
"station": "SomePointB",
"price": 10
},
"ColdDrink": {
"station": "Destination",
"price": 10
},
"Fries": {
"station": "Destination",
"price": 10
},
"HotDog": {
"station": "SomePointB",
"price": 15
}
}
代码解释:
- 使用
map[string]map[string]float64解析输入JSON,直接映射站点到食物价格映射。 - 定义
foodInfo结构体存储站点和价格信息。 - 遍历每个站点和食物,比较价格并更新最低价格记录,处理价格相同时选择第一个站点的逻辑。
- 使用
json.MarshalIndent生成格式化的输出JSON。

