2015-10-20 42 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的建議是解決這種反序列化和處理數據的最佳方法。我的理念是儘可能使結構儘可能具體。你可以在前面完成工作,並且在那之後有更清晰,更簡潔,性能更好的代碼。