Главная » iPhone, Objective-C, Программирование для iOS и MacOS » NSDictiоnагу/NSМutаblеDictiоnаrу Objective-C

0

Как вы уже знаете, элементы массивов идентифицируются числовыми индексами; легко и удобно обратиться к массиву: «Дай мне объект с индексом 10». Словари (ассоциативные массивы) индексируются строками; у них запрос на выборку элемента выглядит иначе: «Дай мне объект с ключом favoriteColor». Говоря точнее, словарь представляет собой коллекцию пар «ключ/значение». Ключ обычно является строкой, а значение может быть произвольным объектом. Пары «ключ/значение» не хранятся в каком-либо определенном порядке.

Создадим словарь руководителей фирмы. Ключом в нем будет должность, а

значением – экземпляр Employee. Первый работник заносится в словарь с ключом

@"СЕО" (исполнительный директор), а второй – с ключом @"СТО" (технический директор). Внесите изменения в main.m: сначала программа создает и заполняет NSМutаblеDiсtiоnаrу, после чего выводит содержимое словаря. Наконец, указателю на словарь присваивается nil, чтобы было видно, что словарь был уничтожен.

// Создание массива объектов Employee

NSMutableArray *employees = [[NSMutableArray alloc] init];

//Создание словаря executives

NSMutableDictionary *executives = [[NSMutableDictionary alloc] init];

for (int i = 0; i < 10; i++) {

// Создание экземпляра Employee

Employee *person = [[Employee alloc] init];

// Присваивание значений переменным экземпляра [person setWeightInKilos:90 + i];

[person  setHeightInMeters:1.8  -­‐   i/10.0]; [person   setEmployeeID:i];

// Включение объекта Employee в массив employees [employees addObject:person];

// Первый работник?

if (i == 0) {

[executives setObject:person forKey:@"CEO"];

}

// Второй работник?

if (i == 1) {

[executives setObject:person forKey:@"CTO"];

}

}

NSLog(@"allAssets: %@", allAssets);

NSLog(@"executives: %@", executives); executives = nil;

NSPredicate *predicate = [NSPredicate predicateWithFormat:

@"holder.valueOfAssets > 70"];

NSArray *toBeReclaimed = [allAssets filteredArrayUsingPredicate:predicate];

NSLog(@"toBeReclaimed: %@", toBeReclaimed); toBeReclaimed = nil;

NSLog(@"Giving up ownership of arrays");

allAssets = nil; employees = nil;

}

return 0;

}

Постройте и запустите программу Содержимое словаря выводится на консоль:

executives = {

CEO = "<Employee 0: $0 in assets>"; CTO = "<Employee 1: $153 in assets>";

}

Рис. 21.3. Два экземпляра Employee в NSМutablеDictiоnаrу

Ключи словаря уникальны. При попытке добавления второго объекта с уже существующим ключом происходит замена первой пары «ключ/значение».

// Создание словаря

NSМutablеDictiоnаrу *friends = [NSМutablеDictiоnаrу dictionary];

// Включение объекта с ключом "bestFriend" [friends setObject:betty forKey:@"bestFriend"];

// Замена объекта

[friends setObject:jane forKey:@"bestFriend"];

// friends содержит только одну пару "ключ/значение" (bestFriend => jane)

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии