Итерация по неопределенной длине подмассивов

как перебрать эту переменную, где у sub может быть еще 10 подписок, например?

struct Struct {
    let title: String
    let sub: [Struct]?
}

let variable = Struct(
    title: "1",
    sub: [
        Struct(title: "1.1", sub: nil),
        Struct(title: "1.2", sub: [
            Struct(title: "1.2.1", sub: nil),
            Struct(title: "1.2.2", sub: [
                Struct(title: "1.2.2.1", sub: nil)
            ])
        ])
    ]
)

Главное, чтобы мой display звонил children.map { $0.display }. Если каждый узел печатает и говорит своим дочерним элементам печатать, вы напечатали их все.

matt 13.12.2020 16:29
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
4
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это довольно просто. Рекурсия. Допустим, мы просто хотим напечатать все заголовки. Представьте себе метод, в котором узел печатает свой заголовок, а затем вызывает один и тот же метод для каждого из своих дочерних элементов. По определению, если вы вызовете этот метод на корневом узле, вы распечатаете все заголовки. Минимальная реализация (не беспокоясь о порядке посещения или формате вывода):

func output() {
    print(title)
    self.sub?.forEach { $0.output() }
}

Другие вопросы по теме