#swift #reduce
Вопрос:
У меня есть эта модель:
struct Class {
var field: [String: Field]
}
struct Field {
var type: String
}
И этот массив:
let classes: [Class] = [
Class(field: ["test": Field(type: "STRING"),
"test2": Field(type: "STRING"),
"test3": Field(type: "NUMBER")]),
Class(field: ["test": Field(type: "POINTER"),
"test2": Field(type: "STRING"),
"test3": Field(type: "STRING")]),
]
Я хотел бы уменьшить все types
свойства в наборе строк, я попробовал это:
let result = classes.map { $0.field.reduce([], { $0 $1.value.type }) }
Но вместо того, чтобы получить набор строк:
Что я хотел бы получить
«СТРОКА», «ЧИСЛО», «УКАЗАТЕЛЬ»
Я получаю массив символов:
[[«S», «T», «R», «I», «N», «G», «N», «U», «M», «B»….]]
Что я должен написать вместо этого? Спасибо вам за вашу помощь
Комментарии:
1. Не могли бы вы, пожалуйста, указать ваши примерные входные данные и желаемый результат?
2. @jnpdx Спасибо за ваш ответ, я отредактировал свой вопрос.
Ответ №1:
Вы можете использовать flatMap
для выравнивания массивов значений, а затем использовать Set
для удаления неуникальных значений:
let result = Set(classes.flatMap { $0.field.values }.map { $0.type })
Если вам нужно Array
вместо a Set
, вы можете просто завернуть вышесказанное в Array()