партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
Для работы с массивами в 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 allocinitWithObjectsAndKeys:

    @
"value1", @"key1"
    @
"value2", @"key2"
    
nil];
Обратите внимание, что сначала идет значение, потом ключ

Объявление пустых изменяемых массивов для последующего добавления элементов в них


NSMutableArray *myArray = [NSMutableArray array];


NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary];


NSMutableArray *myArray = [[NSMutableArray allocinit];


NSMutableDictionary *myDictionary = [[NSMutableDictionary allocinit];


Значения

Значения массива могут быть только указателями. К сожалению, нельзя напрямую подставить в массив значение типа 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 allKeyscontainsObject:@"key1"])

Перебор значений массива

for (NSString *item in myArray) {

    
NSLog(@"%@"item);
}

for (id key in myDictionary) {

    
id object = [myDictionary objectForKey:key];
}

Перебор значений изменяемого массива с изменением значений

for(int i=0i<[myMutableArray count]; i++) {

    
id object = [myMutableArray objectAtIndexi];
    [
myMutableArray setObject:@"New value" atIndex:i];
}

NSArray *keys = [myMutableDictionary allKeys];


for (
int i=0i<[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"];

Чтобы оставить сообщение, авторизуйтесь, или войдите с помощью: