2015-10-20 118 views
-2

一直在搜索和堆栈解决方案没有成功。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 
     } 
    ] 
} 

我可以使用解组,然而,当我打印出来,“红,绿,蓝”值按随机顺序输出,这样导入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值都是随机排列的。我想知道是否有办法始终以相同的顺序输出:红色,绿色,蓝色。

谢谢。

+0

排序之前,你输出.. –

+0

只是fyi可能想修改你的问题,因为你实际遇到的问题是如何显示数据。这里没有任何排序,也没有排序。如果您决定按照降序的RGB值总和对MainGradient数组进行排序,那将是一种排序。从我所知道的情况来看,你只是想将你在内存中的数据格式化为不同的格式。如果情况并非如此,请提供更正,但是地图和结构(这是在RGB对象中容纳数据的唯一两个选项)都没有任何顺序的概念。 – evanmcdonnal

回答

2

无论是在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

+0

谢谢JimB,它做我需要做的事情。 Playground示例非常适合我的需求。再次感谢。 :) – pvazquezdiaz

0

虽然我个人走的路线JimB描述了上述另一种选择是只是为了改变你如何显示数据。我可以根据你的输出来推断你做了什么; fmt.Printf("%v", YourInstance)。如果您明确指定每个格式字符串的位置,则映射中的项目顺序无关紧要;

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

现在只打印单一实例,以便打印你需要进一步的逻辑整件事但是这是基本的想法。

如果你想要的东西有序,地图不是你的结构。如果你想基于密钥快速访问,那么地图是一个不错的选择。如果你只是想将输出格式化为写入控制台或文件或任何其他格式,可以用地图轻松完成,但我个人认为,JimB的建议是解决这种反序列化和处理数据的最佳方法。我的理念是尽可能使结构尽可能具体。你可以在前面完成工作,并且在那之后有更清晰,更简洁,性能更好的代码。