web-dev-qa-db-fra.com

Swift: accès au dictionnaire via l'index

Je souhaite utiliser les valeurs d'un dictionnaire dans mes UITableViewCells. Puis-je obtenir ceux d'un dictionnaire en utilisant indexPath.row pour la valeur et indexPath.section pour la clé?

14
Vincent

vous pouvez obtenir le tableau de clés et obtenir la clé à indexPath.section comme ceci:

Array(yourDictionary.keys)[indexPath.section]

et vous pouvez obtenir la valeur à indexPath.row à partir du tableau de valeurs comme ceci:

Array(yourDictionary.values)[indexPath.row]

Modifier:

si vous voulez obtenir les valeurs d'une clé de section spécifique, vous devez écrire:

let key = Array(yourDictionary.keys)[indexPath.section]
let array = yourDictionary[key]
let value = array[indexPath.row]
48
Firas

Les dictionnaires sont par nature non ordonnés. Si vous utilisez dictionary.keys, vous pouvez obtenir un tableau de clés et l'utiliser, comme @Firas le dit dans sa réponse, mais rien ne garantit que la prochaine fois que vous récupérerez un tableau de clés, elles seront dans le même ordre.

Une autre option consisterait à utiliser Int comme type de clé, puis à utiliser indexPath.row comme clé.

Il est vraiment préférable d'utiliser un tableau en tant que source de données pour une vue sous forme de tableau.

Si vous souhaitez stocker les valeurs d'une vue tabulaire divisée dans un dictionnaire, vous devez utiliser un tableau de section externe, qui contient un tableau de lignes interne, qui contient un dictionnaire de valeurs pour la cellule.

7
Duncan C

Voici mon petit truc pour accéder à Dictionnaire par index. Juste emballer le dictionnaire!

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]]
0
Changnam Hong