Go中的排序接口
Sorting interface in Go
一直在谷歌搜索并四处寻找解决方案,但没有成功。
我正在将 JSON 文件导入结构,但是,当我想使用它时,值以随机顺序出现。这是我的 JSON 文件的示例:
"Assets": {
"asset1": "asset1.png",
"asset2": "asset2.png"
},
"Colors": {
"MainColor": [
{
"red": 247,
"green": 0,
"blue": 247
}
],
"MainGradient": [
{
"red": 9,
"green": 103,
"blue": 170
},
{
"red": 18,
"green": 138,
"blue": 221
}
]
}
我可以使用 Unmarshal 导入 JSON,但是,当我打印它时,"red, green,blue" 值以随机顺序输出,如下所示:
[{map[asset1:asset1.png asset2:asset2.png] {[map[red:247 green:0 blue:247]] [map[green:103 red:9 blue:170] map[green:138 blue:221 red:18]]}}]
如您所见,RGB 值每次都是随机排列的。我想知道是否有办法始终以相同的顺序输出:红色、绿色、蓝色。
谢谢。
Go 和 JSON 规范中的映射都是无序的。您必须在需要时按顺序调用它们。
r, g, b := color["red"], color["green"], color["blue"]
您还可以将值解组为结构,这将为您提供确定性布局:
type Color struct {
Red int `json:"red"`
Green int `json:"green"`
Blue int `json:"blue"`
}
虽然我个人会采用 JimB 上面描述的路线,但另一个选项只是更改显示数据的方式。我可以根据您的输出推断您所做的; fmt.Printf("%v", YourInstance)
。如果您明确指定每个项目的位置以及格式字符串,则地图中项目的顺序无关紧要;
fmt.Printf("red: %v, green: %v, blue: %v\n", ColorInstance["red"], ColorInstance["green"], ColorInstance["blue"])
现在只打印一个实例,因此要打印整个内容,您需要进一步的逻辑,但这是基本思想。
如果您希望事情井井有条,地图不适合您。如果你想基于一个键快速访问,那么地图是一个不错的选择。如果您只想格式化输出以写入控制台或文件或其他内容,可以使用地图轻松完成,但我个人认为,JimB 的建议是处理反序列化和处理此类数据的最佳方法。我的理念是使结构尽可能具体。您可以提前完成工作,然后获得更简洁、更简洁、性能更好的代码。
一直在谷歌搜索并四处寻找解决方案,但没有成功。
我正在将 JSON 文件导入结构,但是,当我想使用它时,值以随机顺序出现。这是我的 JSON 文件的示例:
"Assets": {
"asset1": "asset1.png",
"asset2": "asset2.png"
},
"Colors": {
"MainColor": [
{
"red": 247,
"green": 0,
"blue": 247
}
],
"MainGradient": [
{
"red": 9,
"green": 103,
"blue": 170
},
{
"red": 18,
"green": 138,
"blue": 221
}
]
}
我可以使用 Unmarshal 导入 JSON,但是,当我打印它时,"red, green,blue" 值以随机顺序输出,如下所示:
[{map[asset1:asset1.png asset2:asset2.png] {[map[red:247 green:0 blue:247]] [map[green:103 red:9 blue:170] map[green:138 blue:221 red:18]]}}]
如您所见,RGB 值每次都是随机排列的。我想知道是否有办法始终以相同的顺序输出:红色、绿色、蓝色。
谢谢。
Go 和 JSON 规范中的映射都是无序的。您必须在需要时按顺序调用它们。
r, g, b := color["red"], color["green"], color["blue"]
您还可以将值解组为结构,这将为您提供确定性布局:
type Color struct {
Red int `json:"red"`
Green int `json:"green"`
Blue int `json:"blue"`
}
虽然我个人会采用 JimB 上面描述的路线,但另一个选项只是更改显示数据的方式。我可以根据您的输出推断您所做的; fmt.Printf("%v", YourInstance)
。如果您明确指定每个项目的位置以及格式字符串,则地图中项目的顺序无关紧要;
fmt.Printf("red: %v, green: %v, blue: %v\n", ColorInstance["red"], ColorInstance["green"], ColorInstance["blue"])
现在只打印一个实例,因此要打印整个内容,您需要进一步的逻辑,但这是基本思想。
如果您希望事情井井有条,地图不适合您。如果你想基于一个键快速访问,那么地图是一个不错的选择。如果您只想格式化输出以写入控制台或文件或其他内容,可以使用地图轻松完成,但我个人认为,JimB 的建议是处理反序列化和处理此类数据的最佳方法。我的理念是使结构尽可能具体。您可以提前完成工作,然后获得更简洁、更简洁、性能更好的代码。