Possiedo un array di NSDictionaries. Come posso estrarre il primo elemento nel dizionario?Come posso ottenere il primo elemento in un NSDictionary?
risposta
Non esiste un "primo" elemento in un NSDictionary; i suoi membri non hanno un ordine garantito. Se si desidera solo un oggetto da un dizionario, ma non si cura quale tasto è associata con, si può fare:
id val = nil;
NSArray *values = [yourDict allValues];
if ([values count] != 0)
val = [values objectAtIndex:0];
NSDictionaries non sono ordinati, il che significa che non ci sono primo o l'ultimo elemento. In effetti, l'ordine delle chiavi non è mai garantito per essere lo stesso, anche nella vita di un dizionario specifico.
Se si desidera un oggetto, è possibile ottenere uno dei tasti:
id key = [[message allKeys] objectAtIndex:0]; // Assumes 'message' is not empty
id object = [message objectForKey:key];
Grazie - ha senso. – Ronaldoh1
Se hai NSDictionary nome messaggio, è abbastanza semplice:
message[[[message allKeys] objectAtIndex:0]];
Ma voi devi essere sicuro (o meglio controllare) che il tuo dizionario abbia almeno un elemento. Ecco come si può controllare:
if ([message allKeys] > 0) NSLog(@"%@", message[[[message allKeys] objectAtIndex:0]]);
Ma NSDictionary non ha alcun ordine garantito, quindi probabilmente dovrebbe utilizzare questo codice solo se il dizionario ha un solo elemento.
[UPDATE] E 'anche una buona idea quella di utilizzare questo se è necessario per ottenere qualsiasi elemento di dizionario
Prova questo:
NSDictionary *firstValue = [responseObject objectAtIndex:0];
Secondo Apple, chiama a allKeys
o allValues
sostenere il costo di creare nuovi array:
Un nuovo array contenente i valori del dizionario o un array vuoto se dizionario non ha inserzioni (sola lettura)
Quindi, un'opzione alternativa che non incorrere tale costo potrebbe essere la seguente:
NSString* key = nil;
for(key in yourDict)
{ // this loop will not execute if the dictionary is empty
break; // exit loop as soon as we enter it (key will be set to some key)
}
id object = yourDict[key]; // get object associated with key. nil if key doesn't exist.
Nota: Se il dizionario è vuoto, la chiave rimarrà nullo e anche l'oggetto restituito sarà nullo, pertanto non abbiamo bisogno di una gestione speciale del caso in cui il dizionario è effettivamente vuoto.
Generalmente privilegio la leggibilità rispetto alla velocità/salvataggio della memoria –
Se qualcuno è ancora alla ricerca di risposta per questo tipo di situazione, allora questo può riferirsi:
// dict è NSDictionary
// [allKeys dict] vi darà tutte le chiavi in dict presente
// [[dict allKeys] objectAtIndex: 0] darà da tutti gli oggetti keys all'indice 0 perché [dict allKeys] restituisce una matrice.
[[dict allKeys]objectAtIndex:0];
NSArray ha un selettore denominato firstObject
che semplifica il codice e lo rende più leggibile:
id val = [[yourDict allValues] firstObject];
Se yourDict
è vuota val
sarà nil
, quindi non è necessario controllare il dizionario/dimensione dell'array .
Mentre ciò è vero, e salva una o due righe di codice, la domanda riguarda 'NSDictionary', non' NSArray'. – trojanfoe
Sì, ed è il "primo" valore del dizionario che cosa ottieni con questo codice. È solo che utilizza una conversione di matrice, come quasi tutte le altre risposte. – ASLLOP
Non c'è "prima" con un dizionario perché non ha ordine. Potresti ottenere un "primo" diverso ogni volta che aggiungi un oggetto al dizionario. – trojanfoe
più semplice:
[[dict objectEnumerator] nextObject];
- 1. Come posso ottenere un primo elemento da una lista ordinata?
- 2. TWIG come ottenere il primo elemento dall'array
- 3. Come posso ottenere il primo elemento dopo un elemento con LINQ-to-XML?
- 4. Come posso ordinare un NSDictionary?
- 5. Come ottenere il primo elemento da un array PHP associativo?
- 6. Come ottenere il primo elemento di un oggetto SimpleXML?
- 7. Come posso ottenere il primo elemento da una funzione che restituisce un array in Perl?
- 8. Come posso ottenere il primo elemento da un oggetto IEnumerable <T> in .net?
- 9. Ottenere immediatamente il primo elemento figlio
- 10. come posso ottenere l'autofocus sul primo elemento (buildform) symfony
- 11. jquery cerca di ottenere il primo elemento
- 12. Come posso ottenere un puntatore al primo elemento in un vettore std ::?
- 13. Swift iOS 8, primo valore di NSDictionary
- 14. Come ottenere il primo elemento di uno std :: set
- 15. Come rimuovere il primo elemento in un array?
- 16. Come posso selezionare il primo elemento usando XSLT?
- 17. Come ottenere un valore intero da NSDictionary?
- 18. Come escludere il primo elemento in un involucro flessibile?
- 19. Come ottenere il primo e l'ultimo elemento in un loop per python
- 20. Ottenere primo elemento visibile con jQuery
- 21. Posso mappare il primo elemento di una coppia senza frecce?
- 22. Come ignorare primo elemento in XPath
- 23. Come raggruppare il primo elemento di un array con MongoDB?
- 24. Come trovare primo elemento genitore in jQuery
- 25. Modo efficiente per ottenere/rimuovere il primo elemento dall'elenco?
- 26. Come posso ottenere il primo fotogramma come foto da youtube?
- 27. Restituisce il primo elemento in array_agg()
- 28. Come accedere al primo elemento in iteratore?
- 29. Ottenere il primo elemento x da una lista
- 30. rimuovi il primo elemento dall'array
id val = nil; ?? – lajarre
Sì, quindi puoi ancora messaggio 'val' senza crash se' [valori count] 'è zero. – Wevah
Si noti che il metodo '' 'allValues''' restituisce un array non ordinato. Per la documentazione "L'ordine dei valori nell'array non è definito.". Quindi potresti non ottenere l'oggetto che ti aspetti di ottenere. –