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
  }
}

代码解释:

  1. 使用map[string]map[string]float64解析输入JSON,直接映射站点到食物价格映射。
  2. 定义foodInfo结构体存储站点和价格信息。
  3. 遍历每个站点和食物,比较价格并更新最低价格记录,处理价格相同时选择第一个站点的逻辑。
  4. 使用json.MarshalIndent生成格式化的输出JSON。
回到顶部