2015-08-02 44 views

risposta

43

è possibile ottenere la matrice di chiavi e ottenere la chiave a indexPath.section come questo:

Array(yourDictionary.keys)[indexPath.section] 

e si può ottenere il valore indexPath.row dalla matrice valori in questo modo:

Array(yourDictionary.values)[indexPath.row] 

Edit:

se si desidera ottenere i valori di una chiave di sezione specifica, è necessario scrivere:

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

Grazie! Ho dimenticato di menzionare, mi spiace, che il dizionario di cui sto parlando assomiglia a questo: [String: [AnyObject]]() Quindi ho più oggetti per chiave. È possibile avere una matrice per i valori di una chiave specifica? – Vincent

+0

@Vincent si certo, aggiornerò la mia risposta. – Firas

+0

Grazie! Questo ha funzionato! – Vincent

7

I dizionari sono intrinsecamente non ordinati. Se usi dictionary.keys, puoi ottenere una serie di chiavi e usarle, come dice @Firas nella sua risposta, ma non è garantito che la prossima volta che recupererai un array di chiavi saranno nello stesso ordine.

Un'altra opzione consiste nell'utilizzare Int come tipo di chiave, quindi utilizzare indexPath.row come chiave.

È molto meglio utilizzare un array come origine dati per una vista tabella.

Se si desidera memorizzare i valori per una vista tabella sezionata in un dizionario, è necessario utilizzare un array di sezione esterna, che contiene una matrice di righe interne, che contiene un dizionario di valori per la cella.

0

Ecco il mio piccolo trucco per accedere al dizionario per indice. Basta avvolgere il dizionario!

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