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]]