Objective-C Language
NSDictionary
Ricerca…
Sintassi
@ {chiave: valore, ...}
[Dizionario NSDictionaryWithObjectsAndKeys: valore, chiave, ..., nil];
dict [ chiave ] = valore ;
valore id = dict [ chiave ];
Osservazioni
La classe NSDictionary dichiara l'interfaccia programmatica agli oggetti che gestiscono associazioni immutabili di chiavi e valori. Utilizzare questa classe o la sottoclasse NSMutableDictionary quando è necessario un modo comodo ed efficiente per recuperare i dati associati a una chiave arbitraria. NSDictionary crea dizionari statici e NSMutableDictionary crea dizionari dinamici. (Per praticità, il termine dizionario si riferisce a qualsiasi istanza di una di queste classi senza specificare la sua esatta appartenenza alla classe.)
Una coppia chiave-valore all'interno di un dizionario è chiamata una voce. Ogni voce è composta da un oggetto che rappresenta la chiave e un secondo oggetto che rappresenta il valore di tale chiave. All'interno di un dizionario, i tasti sono unici. Cioè, non esistono due chiavi in un singolo dizionario uguali (come determinato da isEqual :). In generale, una chiave può essere qualsiasi oggetto (purché sia conforme al protocollo NSCopying - vedi sotto), ma si noti che quando si utilizza la codifica del valore-chiave, la chiave deve essere una stringa (vedere Principi fondamentali sulla codifica dei valori-chiave). Né una chiave né un valore possono essere nulli; se è necessario rappresentare un valore nullo in un dizionario, è necessario utilizzare NSNull.
NSDictionary è "ponte senza pedaggio" con la sua controparte Core Foundation, CFDictionaryRef. Vedere Bridging senza pedaggio per ulteriori informazioni sul bridging senza pedaggio.
Creare usando i letterali
NSDictionary *inventory = @{
@"Mercedes-Benz SLK250" : @(13),
@"BMW M3 Coupe" : @(self.BMWM3CoupeInventory.count),
@"Last Updated" : @"Jul 21, 2016",
@"Next Update" : self.nextInventoryUpdateString
};
Creazione usando dictionaryWithObjectsAndKeys:
NSDictionary *inventory = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:13], @"Mercedes-Benz SLK250",
[NSNumber numberWithInt:22], @"Mercedes-Benz E350",
[NSNumber numberWithInt:19], @"BMW M3 Coupe",
[NSNumber numberWithInt:16], @"BMW X6",
nil];
nil
deve essere passato come ultimo parametro come sentinella che indica la fine.
È importante ricordare che quando si istanziano i dizionari in questo modo i valori vanno prima e i tasti in secondo luogo. Nell'esempio sopra le stringhe sono le chiavi e i numeri sono i valori. Il nome del metodo riflette anche questo: dictionaryWithObjectsAndKeys
. Anche se questo non è corretto, il modo più moderno di istanziare i dizionari (con i letterali) è preferibile.
Creare usando plists
NSString *pathToPlist = [[NSBundle mainBundle] pathForResource:@"plistName"
ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:pathToPlist];
Impostazione di un valore in NSDictionary
Esistono diversi modi per impostare l'oggetto di una chiave in un NSDictionary, corrispondente al modo in cui si ottiene un valore. Ad esempio, aggiungere un lamborghini a un elenco di automobili
Standard
[cars setObject:lamborghini forKey:@"Lamborghini"];
Proprio come qualsiasi altro oggetto, chiama il metodo di NSDictionary che imposta un oggetto di una chiave, objectForKey:
Fare attenzione a non confondere questo con setValue:forKey:
questo è per una cosa completamente diversa, Key Value Coding
Abbreviazione
cars[@"Lamborghini"] = lamborghini;
Questa è la sintassi che usi per i dizionari nella maggior parte degli altri linguaggi, come C #, Java e Javascript. È molto più conveniente della sintassi standard e probabilmente più leggibile (specialmente se si codifica in queste altre lingue), ma ovviamente non è standard . È anche disponibile solo nelle versioni più recenti di Objective C
Ottenere un valore da NSDictionary
Esistono diversi modi per ottenere un oggetto da un NSDictionary con una chiave. Ad esempio, per ottenere un lamborghini da un elenco di automobili
Standard
Car * lamborghini = [cars objectForKey:@"Lamborghini"];
Proprio come qualsiasi altro oggetto, chiama il metodo di NSDictionary che ti dà un oggetto per una chiave, objectForKey:
Fare attenzione a non confondere questo con valueForKey:
questo è per una cosa completamente diversa, Key Value Coding
Abbreviazione
Car * lamborghini = cars[@"Lamborghini"];
Questa è la sintassi che usi per i dizionari nella maggior parte degli altri linguaggi, come C #, Java e Javascript. È molto più conveniente della sintassi standard e probabilmente più leggibile (specialmente se si codifica in queste altre lingue), ma ovviamente non è standard . È anche disponibile solo nelle versioni più recenti di Objective C
Controlla se NSDictionary ha già una chiave o meno
Obiettivo c:
//this is the dictionary you start with.
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"name1", @"Sam",@"name2", @"Sanju",nil];
//check if the dictionary contains the key you are going to modify. In this example, @"Sam"
if (dict[@"name1"] != nil) {
//there is an entry for Key name1
}
else {
//There is no entry for name1
}