Можно ли инициализировать значения карты при создании нового отображения? - PullRequest
0 голосов
/ 16 февраля 2019

Я работаю с картой, которая переходит от байтовых массивов к 2D-спискам, отдельные элементы списка которых представляют собой 32-разрядные целые числа без знака.т.е. map[[8]byte][][]uint32

В настоящее время у меня есть логика, которая проверяет, заполнен ли 2D-список, и если нет, я добавляю два пустых списка.Оттуда я могу начать заполнять эти списки.Примерно так:

my_map := make(map[[8]byte][][]uint32)
/* Some logic to define x and i */
if len(my_map[x]) == 0 {
    /* Create two fresh inner-lists */
}
my_map[x][0] = append(my_map[x][0], uint32(i))

Однако это не самое элегантное и эффективное решение.Мне было интересно, есть ли у GO способ автоматически заполнять значения 2D-списка карты внутренними списками при создании нового отображения.В качестве альтернативы, если есть лучший тип данных для использования, я весь слух.

По сути, вот что я хочу сделать:

my_map := make(map[[8]byte][][]uint32)
/* Some logic to define x and i */
my_map[x][0] = append(my_map[x][0], uint32(i))

1 Ответ

0 голосов
/ 16 февраля 2019

Значением по умолчанию для срезов является nil, с которым append может работать.Вы можете сделать это:

package main

import "fmt"

func main() {
    m := make(map[string][]int)
    m["test0"] = append(m["test0"], 10)
    m["test1"] = append(m["test1"], 10)
    m["test2"] = append(m["test2"], 10)
    fmt.Println(m)
}

Однако ваш случай сложнее, потому что ваши значения представляют собой кусочки кусочков.Значение по умолчанию nil в этом случае не подходит, потому что вы разыменовываете nil с my_map[x][0].Так что вам придется явно проверить, был ли индекс [0] уже выделен.В этом нет ничего особенно неэффективного, ИМХО.Его преимущество в том, что он явный, поэтому вы можете точно видеть, где что-то распределяется.

При желании вы можете инкапсулировать эту функцию в функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...