Задать вопрос
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel

Как декларировать массив массивов произвольной вложенности?

Попробовал
type sl []sl
компилируется, и даже можно конструировать
var foo sl = make(sl, 2)
var bar sl = make(sl, 0)
var bazz sl = make(sl, 2)
bazz[0] = foo
bazz[1] = bar
fmt.Println(bazz)
fmt.Println("size", unsafe.Sizeof(bazz))

печатает
[[[] []] []]
size 12
но непонятно как декларировать тип элемента и как заполнять...
  • Вопрос задан
  • 148 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Если объявить type s1 []s1, то заполнять так:

s1 := s1{
		{
			{}, {
				{}, {}, {}, {}, {},
			}, {},
		},
	}


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

type s1 struct {
	Value    int // тут любой тип можно, в принципе, лучше указателем
	Children []s1
}

func main() {
	s1 := s1{
		Children: []s1{
			{Children: []s1{
				{Value: 1}, {Value: 2}, {Value: 3},
			}},
			{Children: []s1{
				{Value: 4}, {Value: 5},
			}},
		},
	}
	fmt.Println(s1)
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alfss
@alfss
https://career.habr.com/alfss
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы