Objective-C Language
NSDictionary
Szukaj…
Składnia
@{ kluczowa wartość, ... }
[NSDictionary dictionaryWithObjectsAndKeys: wartość, klucz, ..., zero];
dict [ klucz ] = wartość ;
wartość id = dict [ klucz ];
Uwagi
Klasa NSDictionary deklaruje interfejs programistyczny do obiektów zarządzających niezmiennymi powiązaniami kluczy i wartości. Użyj tej klasy lub jej podklasy NSMutableDictionary, gdy potrzebujesz wygodnego i wydajnego sposobu wyszukiwania danych powiązanych z dowolnym kluczem. NSDictionary tworzy słowniki statyczne, a NSMutableDictionary tworzy słowniki dynamiczne. (Dla wygody termin słownik odnosi się do dowolnego wystąpienia jednej z tych klas bez dokładnego określenia przynależności do klasy).
Para klucz-wartość w słowniku nazywana jest wpisem. Każdy wpis składa się z jednego obiektu reprezentującego klucz i drugiego obiektu, który jest wartością tego klucza. W słowniku klucze są unikalne. Oznacza to, że żadne dwa klucze w jednym słowniku nie są równe (co określa isEqual :). Zasadniczo kluczem może być dowolny obiekt (pod warunkiem, że jest zgodny z protokołem NSCopying - patrz poniżej), ale należy pamiętać, że przy stosowaniu kodowania klucz-wartość klucz musi być ciągiem (patrz Podstawy kodowania klucz-wartość). Ani klucz, ani wartość nie mogą być zerowe; jeśli chcesz reprezentować wartość pustą w słowniku, powinieneś użyć NSNull.
NSDictionary jest „darmowym mostem” ze swoim odpowiednikiem Core Foundation, CFDictionaryRef. Aby uzyskać więcej informacji na temat mostkowania bez opłat, zobacz Bezpłatne mostkowanie.
Tworzenie za pomocą literałów
NSDictionary *inventory = @{
@"Mercedes-Benz SLK250" : @(13),
@"BMW M3 Coupe" : @(self.BMWM3CoupeInventory.count),
@"Last Updated" : @"Jul 21, 2016",
@"Next Update" : self.nextInventoryUpdateString
};
Tworzenie za pomocą 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
musi zostać przekazane jako ostatni parametr jako wartownik oznaczający koniec.
Należy pamiętać, że podczas tworzenia słowników w ten sposób wartości są pierwsze, a klucze drugie. W powyższym przykładzie ciągi znaków to klucze, a liczby to wartości. Nazwa metody również to odzwierciedla: dictionaryWithObjectsAndKeys
. Chociaż nie jest to niepoprawne, preferowany jest bardziej nowoczesny sposób tworzenia słowników (z literałami).
Tworzenie za pomocą listew
NSString *pathToPlist = [[NSBundle mainBundle] pathForResource:@"plistName"
ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:pathToPlist];
Ustawienie wartości w NSDictionary
Istnieje wiele sposobów ustawiania obiektu klucza w NSDictionary, odpowiadających sposobom uzyskania wartości. Na przykład, aby dodać lamborghini do listy samochodów
Standard
[cars setObject:lamborghini forKey:@"Lamborghini"];
Tak jak każdy inny obiekt, wywołaj metodę NSDictionary, która ustawia obiekt klucza, objectForKey:
Uważaj, aby nie pomylić tego z setValue:forKey:
to zupełnie inna sprawa, kodowanie wartości klucza
Stenografia
cars[@"Lamborghini"] = lamborghini;
Jest to składnia używana w przypadku słowników w większości innych języków, takich jak C #, Java i JavaScript. Jest o wiele wygodniejszy niż standardowa składnia i prawdopodobnie bardziej czytelny (szczególnie jeśli piszesz w tych innych językach), ale oczywiście nie jest to standard . Jest również dostępny tylko w nowszych wersjach Celu C.
Uzyskiwanie wartości z NSDictionary
Istnieje wiele sposobów uzyskania obiektu z NSDictionary za pomocą klucza. Na przykład, aby uzyskać lamborghini z listy samochodów
Standard
Car * lamborghini = [cars objectForKey:@"Lamborghini"];
Tak jak każdy inny obiekt, wywołaj metodę NSDictionary, która daje obiekt dla klucza, objectForKey:
Uważaj, aby nie pomylić tego z wartościąForKey valueForKey:
to zupełnie inna sprawa, kodowanie wartości klucza
Stenografia
Car * lamborghini = cars[@"Lamborghini"];
Jest to składnia używana w przypadku słowników w większości innych języków, takich jak C #, Java i JavaScript. Jest o wiele wygodniejszy niż standardowa składnia i prawdopodobnie bardziej czytelny (szczególnie jeśli piszesz w tych innych językach), ale oczywiście nie jest to standard . Jest również dostępny tylko w nowszych wersjach Celu C.
Sprawdź, czy NSDictionary ma już klucz, czy nie
Cel 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
}