Для работы с массивами в Objective-C/Cocoa предусмотрены несколько классов: NSArray, NSMutableArray, NSDictionary, NSMutableDictionary. NSMutableArray и NSMutableDictionary отличаются от NSArray и NSDictionary тем, что они не могут быть изменены после создания (как и любые другие типы, имеющие в названии "Mutable"). NSArray и NSMutableArray - это массивы с числовыми индексами, NSDictionary и NSMutableDictionary - массивы с символьными индексами (ключами).
[spoiler]
Если у вас есть свои примеры и вы хотите поделиться ими, не стесняйтесь, пишите в комментариях :)
Объявление массивовСпособ 1:
NSArray *myArray = @[
@"value1",
@"value2"
];
|
NSDictionary *myDictionary = @{
@"key1": @"value1",
@"key2": @"value2"
};
|
Способ 2:
NSArray *myArray = [NSArray arrayWithObjects:
@"value1",
@"value2",
nil];
|
NSDictionary *myDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
@"value1", @"key1",
@"value2", @"key2",
nil];
|
Обратите внимание, что сначала идет значение, потом ключ
Объявление пустых изменяемых массивов для последующего добавления элементов в них
NSMutableArray *myArray = [NSMutableArray array];
|
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary];
|
NSMutableArray *myArray = [[NSMutableArray alloc] init];
|
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
|
ЗначенияЗначения массива могут быть только указателями. К сожалению, нельзя напрямую подставить в массив значение типа int или float, но можно использовать NSNumber.
float value1 = 1.0;
float value2 = 2.0;
NSArray *array = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:value1],
[NSNumber numberWithFloat:value2],
nil];
|
Добавление значений в изменяемый массив
[myMutableArray addObject:@"value1"];
[myMutableArray insertObject:@"value1" atIndex:2];
[myMutableDictionary setObject:@"value1" forKey:@"key1"];
myMutableDictionary[@"key1"] = @"value1";
|
Установка существующего значения изменяемого массива
[myMutableArray replaceObjectAtIndex:1 withObject:@"value1"];
[myMutableDictionary setObject:@"value1" forKey:@"key1"];
|
Удаление значения из изменяемого массива
[myMutableArray removeObject:@"value1"];
[myMutableArray removeObjectAtIndex:0];
[myMutableDictionary removeObjectForKey:@"key1"];
|
Обнуление изменяемого массива (очистка всех значений)
[myMutableArray removeAllObjects];
[myMutableDictionary removeAllObjects];
|
Получение значений
NSString *value = [myArray objectAtIndex:2];
NSString *value = myArray[2];
NSString *value = [myDictionary objectForKey:@"key1"];
NSString *value = myDictionary[@"key1"];
|
Получение количества элементов массива
unsigned long count = [myArray count];
unsigned long count = [myDictionary count];
|
Проверка на существование значения в массиве (альтернатива php in_array)
if ([myArray containsObject:@"value1"])
if ([myDictionary containsObject:@"value1"])
|
Проверка на существование ключа в NSDictionary или NSMutableDictionary (альтернатива php array_key_exists)
if ([myDictionary objectForKey:@"key1"])
if ([[myDictionary allKeys] containsObject:@"key1"])
|
Перебор значений массива
for (NSString *item in myArray) {
NSLog(@"%@", item);
}
|
for (id key in myDictionary) {
id object = [myDictionary objectForKey:key];
}
|
Перебор значений изменяемого массива с изменением значений
for(int i=0; i<[myMutableArray count]; i++) {
id object = [myMutableArray objectAtIndex: i];
[myMutableArray setObject:@"New value" atIndex:i];
}
|
NSArray *keys = [myMutableDictionary allKeys];
for (int i=0; i<[keys count]; i++) {
group = [myMutableDictionary objectForKey:keys[i]];
[myMutableDictionary setObject:@"New value" forKey:keys[i]];
}
|
Получить фрагмент массива
NSArray *myArray2 = [myArray1 subarrayWithRange:NSMakeRange(2,5)];
|
Сделать изменяемую копию массива из неизменяемого массива
NSMutableArray *myMutableArray = [myArray mutableCopy];
NSMutableDictionary *myMutableDictionary = [myDictionary mutableCopy];
|
Сделать неизменяемую копию массива из изменяемого массива
NSArray *myArray = [myMutableArray copy];
NSArray *myDictionary = [myMutableDictionary copy];
NSArray *myArray = [NSArray arrayWithArray:myMutableArray];
NSArray *myDictionary = [NSDictionary dictionaryWithDictionary:myMutableDictionary];
|
Сравнение массивов
if ([myArray1 isEqualToArray:myArray2])
|
if ([myDictionary1 isEqualToDictionary:myDictionary2])
|
СортировкаСортировка с дескрипторами (если, например, есть массив, который состоит из элементов - NSDictionary)
NSDictionary *myDictionary1 = @{
@"string": @"String 1",
@"number": [NSNumber numberWithFloat:1.5]
};
NSDictionary *myDictionary2 = @{
@"string": @"String 2",
@"number": [NSNumber numberWithFloat:2.0]
};
NSMutableArray *myMutableArray = [NSMutableArray arrayWithObjects:
myDictionary1,
myDictionary2,
nil];
NSSortDescriptor *myDescriptor1 = [NSSortDescriptor
sortDescriptorWithKey:@"number"
ascending:YES
selector:@selector(compare:)
];
NSSortDescriptor *myDescriptor2 = [NSSortDescriptor
sortDescriptorWithKey:@"string"
ascending:YES
selector:@selector(caseInsensitiveCompare:)
];
[myMutableArray sortUsingDescriptors:@[myDescriptor1,myDescriptor2]];
|
Работа с числовыми массивами (массивами из NSNumber)Получить сумму элементов массива
NSNumber *mySum = [myArray valueForKeyPath: @"@sum.self"];
|
Получить среднее арифметическое элементов массива
NSNumber *myAverage = [myArray valueForKeyPath: @"@avg.floatValue"];
|
Сохранение массива в файл и считывание массива из файлаСохранить массив в файл
[myDictionary writeToFile:@"/folder/file" atomically:YES];
|
Считать массив из файла
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:@"/folder/file"];
|
13.12.201522:4513.12.2015 22:45:55