Swift: доступ к словарю через индекс
Я хочу использовать значения из словаря в моем UITableViewCells. Могу ли я получить их из словаря, используя indexPath.row для значения и indexPath.section для ключа?
Ответы
Ответ 1
вы можете получить массив ключей и получить ключ в indexPath.section
следующим образом:
Array(yourDictionary.keys)[indexPath.section]
и вы можете получить значение в indexPath.row
из массива значений следующим образом:
Array(yourDictionary.values)[indexPath.row]
Edit:
если вы хотите получить значения определенного раздела раздела, вы должны написать:
let key = Array(yourDictionary.keys)[indexPath.section]
let array = yourDictionary[key]
let value = array[indexPath.row]
Ответ 2
Словари по своей природе неупорядочены. Если вы используете словарные слова, вы можете получить массив ключей и использовать их, как говорит @Firas в своем ответе, но нет гарантии, что в следующий раз, когда вы получите массив ключей, они будут в том же порядке.
Другой вариант - использовать Int как тип ключа, а затем использовать indexPath.row как ключ.
Лучше использовать массив в качестве источника данных для представления таблицы.
Если вы хотите сохранить значения для секционированного представления таблицы в словаре, вы должны использовать массив внешнего раздела, который содержит внутренний массив строк, который содержит словарь значений для ячейки.
Ответ 3
Вот мой небольшой трюк, чтобы получить доступ к словарю по индексу. Просто закройте словарь!
var dict = [String: [Int]]()
dict.updateValue([1, 2, 3], forKey: "firstKey")
dict.updateValue([3, 4, 5], forKey: "secondKey")
var keyIndex = ["firstKey": "firstKey", "secondKey": "secondKey"]
var arr = [[String: [Int]]]()
for (key, value) in dict {
arr.append([keyIndex[key]!: value])
}
print(arr[0]) // ["firstKey": [1, 2, 3]]