#arrays #swift
#массивы #swift
Вопрос:
Пожалуйста, рассмотрите следующее:
struct House {
let houseName: String
let personIn: [Person]
}
struct Person {
let name: String
let age: Int
}
var persons: [Person] = [ Person(name: "pers1", age: 10),
Person(name: "pers2", age: 20),
Person(name: "pers3", age: 30)]
var houses: [House] = [House(houseName: "houseNameFirst", personIn: persons),
House(houseName: "houseNameSecond", personIn: persons),
House(houseName: "houseNameThird", personIn: persons)]
let names = houses.map{ $0.personIn.map{$0.name}}
print(names) // Prints [["pers1", "pers2", "pers3"], ["pers1", "pers2", "pers3"], ["pers1", "pers2", "pers3"]]
Мне нужен массив только имен пользователей, а не массив массивов, есть ли короткий способ добиться этого, не создавая расширения для массива?
Ответ №1:
Swift 5.2 или более поздней версии вы можете использовать keypath для выравнивания своей коллекции, а затем просто сопоставить имя
let names = houses.flatMap(.personIn).map(.name)
Ответ №2:
Просто используйте flatMap(_:)
функцию для houses
массива:
let names = houses.flatMap { $0.personIn.map{ $0.name } }