партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Простой адаптивный форум - модуль для битрикс
Для работы с массивами в Objective-C/Cocoa предусмотрены несколько классов: NSArray, NSMutableArray, NSDictionary, NSMutableDictionary. NSMutableArray и NSMutableDictionary отличаются от NSArray и NSDictionary тем, что они не могут быть изменены после создания (как и любые другие типы, имеющие в названии "Mutable"). NSArray и NSMutableArray - это массивы с числовыми индексами, NSDictionary и NSMutableDictionary - массивы с символьными индексами (ключами).

Если у вас есть свои примеры и вы хотите поделиться ими, не стесняйтесь, пишите в комментариях :)

Объявление массивов

Способ 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"];

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью:
Главная   ·   Модули для 1С-Битрикс   ·   Типовые услуги   ·   Форум   ·   Блог   ·   Контакты
Рейтинг@Mail.ru