Как получить значение из всех ключей с одинаковым именем из массива словарей

Я хотел бы получить значения из ключей с именем «termKey» из всех словарей в массиве словарей (поскольку я хочу отображать значения в UITableView). Какие-либо предложения?

Вот массив словарей:

{
  "questionData": [
    {
      "termKey": "respiration"
    },
    {
      "termKey": "mammals"
    }
  ]
}

Это сглаженный массив:

[(key: "termKey", value: "respiration"), (key: "termKey", value: "mammals")]

Результат, который я хочу, будет примерно таким: ["respiration", "mammals"]

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

Ответы 3

let array = [(key: "termKey", value: "respiration"), (key: "termKey", value: "mammals")]
array.map({ $0.value })

И вы получите массив значений, который выглядит так:

["respiration", "mammals"]
Ответ принят как подходящий

Используйте compactMap в массиве и найдите ключ словаря в замыкании:

let questionData = [["termKey": "respiration"], ["termKey": "mammals"], ["badKey": "foo"]]

let values = questionData.compactMap { $0["termKey"] }
print(values)
["respiration", "mammals"]

compactMap запускает закрытие для каждого элемента в массиве, чтобы создать новый массив. Здесь мы ищем значение для ключа "termKey". Словарный поиск возвращает необязательное значение. Если ключа нет, результатом будет nil. compactMap пропускает значения nil и разворачивает имеющиеся значения.

Декодируйте JSON в структуры и map результат в termKey значения questionData.

struct Response: Decodable {
    let questionData : [Question]
}

struct Question: Decodable {
    let termKey : String
}

let jsonString = """
{"questionData": [{"termKey": "respiration"},{"termKey": "mammals"}]}
"""

let data = Data(jsonString.utf8)
do {
    let result = try JSONDecoder().decode(Response.self, from: data)
    let termKeys = result.questionData.map{$0.termKey}

} catch { print(error) }

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