为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的排序接口

Go中的排序接口

Go
叮当猫咪 2021-11-15 20:37:31
一直在谷歌上搜索并寻找解决方案,但没有成功。我正在将一个 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,但是,当我打印它时,“红色、绿色、蓝色”值以随机顺序输出,如下所示:[{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 值每次都以随机顺序出现。我想知道是否有办法始终以相同的顺序输出:红色、绿色、蓝色。谢谢你。
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

地图是无序的,无论是在 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"`

}

http://play.golang.org/p/0l01NxJ4dq


查看完整回答
反对 回复 2021-11-15
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

虽然我个人会采用上面 JimB 描述的路线,但另一种选择只是改变您显示数据的方式。我可以根据您的输出推断出您所做的;fmt.Printf("%v", YourInstance). 如果您使用格式字符串明确指定每个项目的位置,则地图中项目的顺序无关紧要;

fmt.Printf("red: %v, green: %v, blue: %v\n", ColorInstance["red"], ColorInstance["green"], ColorInstance["blue"])

现在只打印一个实例,因此要打印整个内容,您需要进一步的逻辑,但这是基本思想。

如果您希望事情井然有序,那么地图不是适合您的结构。如果您想基于密钥快速访问,那么地图是一个不错的选择。如果您只想格式化输出以写入控制台或文件或其他任何内容,可以使用地图轻松完成,但我个人认为,JimB 的建议是进行反序列化和处理此类数据的最佳方法。我的理念是使结构尽可能具体。您可以先完成工作,然后获得更清晰、更简洁、性能更好的代码。


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信