2015-10-20 2 views
-2

Безнадежный поиск в Google и решение проблем без успеха.Интерфейс сортировки в 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 может немного пересмотреть ваш вопрос, так как проблема, с которой вы сталкиваетесь, - это как отображать данные. Здесь нет сортировки и ничего не сортировать. Если вы решили отсортировать массив «MainGradient» по сумме значений RGB, по убыванию, это будет сортировка. Из того, что я могу сказать, вы просто хотите отформатировать данные, которые у вас есть в памяти, разные. Если это не так, предложите исправление, но ни карта, ни структура (которые являются единственными двумя вариантами для размещения данных в объектах 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, Он делает то, что мне нужно. Пример площадки был идеален для моих нужд. Еще раз спасибо. :) – pvazquezdiaz

0

Хотя лично я бы маршрут JimB описывает над другим вариантом просто чтобы изменить способ отображения данных. Я могу сделать вывод о том, что вы сделали; fmt.Printf("%v", YourInstance). Порядок элементов на карте не имеет значения, если вы явно указываете, где каждый идет с такой строкой формата, как;

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

Теперь, когда печатает только один экземпляр, чтобы напечатать все, что вы нуждались бы дополнительная логикой, но это основная идея.

Если вы хотите, чтобы все было в порядке, карта не является структурой для вас. Если вам нужен быстрый доступ на основе ключа, то карта является хорошим выбором. Если вы просто хотите отформатировать свой вывод для записи на консоль или файл или что-то еще, это можно легко сделать с помощью карты, но лично я думаю, что предложение JimB - лучший способ подойти к десериализации и обработке данных, подобных этому. Моя философия состоит в том, чтобы сделать структуры максимально конкретными. Вы получаете работу с самого начала и с более чистым, более кратким, более эффективным кодом.

Смежные вопросы