Свойство Swift Deep Flatten Array

У меня есть следующий код для создания Person класс и есть множество людей.

class Person {
    let name: String
    var children: [Person]

    init() {
        //removing init code to make question shorter, but just setting the variables passed in to the variables in the class
    }
}

var people: [Person] = [Person]()
var personA: Person = Person.init(name: "Bob Smith")
var personB: Person = Person.init(name: "Tom Smith")
var personC: Person = Person.init(name: "Billy Smith")
var personD: Person = Person.init(name: "Steve Smith")
var personE: Person = Person.init(name: "Steve Smith")

personA.children.append(personB)
personB.children.append(personD)
personB.children.append(personC)
personD.children.append(personE)

people.append(personA)

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

У меня есть отдельный раздел, где я пытаюсь преобразовать это people массив в основном сгладить его. Я попытался следующий код безуспешно.

people.flatMap({ [$0, $0.children] }).filter({ $0 is Person }) as! [Person]

Этот код не работает вообще. Я попытался внести небольшие коррективы в это и получил ошибки и предупреждения, такие как Cannot convert value of type '[Any]' to closure result type 'String?' а также Expression implicitly coerced from '[Person]?' to Any,

Второе предупреждение, которое я пытался изменить с [$0, $0.children] в [$0, $0.children ?? nil] при условии, что это решит проблему. Если children является nil Я в основном хочу, чтобы это продолжалось и не помещало ничего там, так как нет детей. Но внесение этого изменения продолжало вызывать ту же ошибку.

Но в основном я хочу взять people сверху и преобразовать его из 1 элемента (personA) до 5 элементов (personA, personB, personD, personE, personC).

В основном у меня есть следующий массив (в том числе children имущество).

- personA
    - personB
        - personD
            - personE
        - personC

Я хочу взять этот массив и сгладить его рекурсивно (глубоко сгладить). Вроде следующего.

- personA
- personB
- personD
- personE
- personC

Как мне этого добиться?

0 ответов

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