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       
}


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow