Структура map

270 views
Skip to first unread message

Евгений Смольников

unread,
Apr 5, 2017, 3:57:19 AM4/5/17
to Golang Russian
Добрый день! 
Помогите разобраться. 

есть данные 
  • ID - id1 - id2 - name
  • 100 - 1 - 123 - имя 1
  • 200 - 2 - 321 - имя 2
  • 100 - 2 - 231 - имя 3
  • 200 - 2 - 132 - имя 4
  • 100 - 1 - 312 - имя 5
Нужно чтобы получился массив типа 


 
[100] => [1] => [123] => имя 1
                 
[312] => имя 5
         
[2] => [231] => имя 3
 
[200] => [2] => [321] => имя 2
                 
[132] => имя 4



Map := make(map[int]map[int]map[int]string)
 
var (
 id          
int
 
IDNampr      int
 typeNapr    
int
 nameNapr    
string
 
)
//arrayData - упростил, тут берутся данные из базы, с ними проблем нет
for arrayData{
   
Map[IDNampr][typeNapr][id] = nameNapr
}

В итоге при выполнении :assignment to entry in nil map

Daniel Podolsky

unread,
Apr 5, 2017, 4:46:50 AM4/5/17
to gola...@googlegroups.com
так а в чем вопрос-то?

perl создает отсутствующие элементы на лету, go - не создает. as simple as that.

я вот позавчера решал аналогичную проблему, и мне удалось обойтись map
одного уровня. возможно, удастся и вам.


типа

Map := make(map[struct {int, int,int}]string) (это псевдокод, а не go)
> --
> Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес
> golang-ru+...@googlegroups.com.
> Чтобы настроить другие параметры, перейдите по ссылке
> https://groups.google.com/d/optout.

Евгений Смольников

unread,
Apr 5, 2017, 11:38:09 PM4/5/17
to Golang Russian
Так вот нужен именно многомерный массив

среда, 5 апреля 2017 г., 11:46:50 UTC+3 пользователь Daniel Podolsky написал:

Евгений Смольников

unread,
Apr 6, 2017, 3:02:55 AM4/6/17
to Golang Russian
Может ли в карте(map) у одного ключа быть несколько значений(других карт(map`ов))

четверг, 6 апреля 2017 г., 6:38:09 UTC+3 пользователь Евгений Смольников написал:

Oleg Bulatov

unread,
Apr 6, 2017, 5:13:08 AM4/6/17
to Golang Russian
Почему нужен именно многомерный массив?

А при использовании вложенный ассоциативных массивов вида map[Foo]map[Bar]Baz нужно создавать все вложенные map'ы самостоятельно, т.к. по-умолчанию значение в map[Foo]... будет nil:

x := make(map[Foo]map[Bar]Baz)
x[foo] = make(map[Bar]Baz)
x[foo][bar] = baz

Alexander Kozlikhin

unread,
Apr 6, 2017, 7:01:33 PM4/6/17
to Golang Russian
четверг, 6 апреля 2017 г., 6:38:09 UTC+3 пользователь Евгений Смольников написал:
Так вот нужен именно многомерный массив

map[int]map[int]map[int]string - это не многомерный массив, а словарь (map) с несколькими уровнями вложенности словарей, последовательно выступающих в качестве ключей. Ну OK, если так действительно надо. Но стоило бы подумать о производительности такой конструкции со столькими уровнями косвенных ссылок через словари. Вероятно, для такого типа данных и Ваших задач можно было бы этого избежать все же.

Евгений Смольников

unread,
Apr 12, 2017, 8:53:51 PM4/12/17
to Golang Russian
Да, сделал просто нужную структуру, обошелся без словаря. Спасибо

пятница, 7 апреля 2017 г., 2:01:33 UTC+3 пользователь Alexander Kozlikhin написал:

Евгений Смольников

unread,
Apr 12, 2017, 8:54:35 PM4/12/17
to Golang Russian
Спасибо, разобрался

четверг, 6 апреля 2017 г., 12:13:08 UTC+3 пользователь Oleg Bulatov написал:

Евгений Смольников

unread,
Apr 12, 2017, 8:54:50 PM4/12/17
to Golang Russian


пятница, 7 апреля 2017 г., 2:01:33 UTC+3 пользователь Alexander Kozlikhin написал:
четверг, 6 апреля 2017 г., 6:38:09 UTC+3 пользователь Евгений Смольников написал:
Reply all
Reply to author
Forward
0 new messages