Класс NSMutableSet
, также как и NSSet
, предназначен для создания неупорядоченного набора уникальных объектов, но в отличие от него позволяет создавать изменяемые (mutable) наборы. NSMutableSet
является подклассом NSSet
Класс принимает следующие протоколы (наследование от NSSet
):
- NSCoding
- NSCopying
- NSMutableCopying
- NSFastEnumeration
Класс, в дополнение к унаследованным от NSSet
, реализует методы создания изменяемых наборов, добавления и удаления объектов, комбинации и рекомбинации наборов.
Пример работы с изменяемым набором
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSLog(@"%@", mySet1);
// Добавление объекта в набор
[mySet1 addObject:@"four"];
NSLog(@"%@", mySet1);
// Удаление объекта из набора
[mySet1 removeObject:@"one"];
NSLog(@"%@", mySet1);
Создание изменяемого набора
+setWithCapacity:
- создает набор с указанной начальной емкостью. Емкость набора передается в единственном аргументе. Емкость набора будет автоматически увеличиваться по мере необходимости. Метод возвращает объект класса NSMutableSet
.
Инициализация изменяемого набора
-initWithCapacity:
- инициализирует созданный набор с указанной начальной ёмкостью. Возвращает инициализированный объект класса NSMutableSet
Добавление и удалении объектов
-addObject:
- добавляет новый объект к текущему набору. Метод принимает один аргумент - добавляемый объект . Если объект уже присутствует в наборе, то добавление не произойдет. Добавляемый объект захватывается с помощью посылки сообщения retain
.
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSLog(@"%@", mySet1);
[mySet1 addObject:@"four"];
NSLog(@"%@", mySet1);
-addObjectsFromArray:
- добавляет новые объекты к текущему набору из переданного массива. Метод принимает один аргумент — массив добавляемых объектов. Если в массиве объект встречается более одного раза , то в набор он будет добавлен только один раз. Если объект из массива уже присутствует в текущем наборе, то он также не будет добавлен.
Каждый объект из массива, добавляемый в набор, захватывается с помощью посылки сообщения retain
.
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSArray *myArray = [NSArray arrayWithObjects: @"four", @"five", @"one", nil];
NSLog(@"%@", mySet1);
[mySet1 addObjectsFromArray:myArray];
NSLog(@"%@", mySet1);
-removeObject:
- удаляет объект из набора. Метод принимает один аргумент - удаляемый объект
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSLog(@"%@", mySet1);
[mySet1 removeObject:@"one"];
NSLog(@"%@", mySet1);
-removeAllObjects
- удаляет все объекты из набора
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSLog(@"%@", mySet1);
[mySet1 removeAllObjects];
NSLog(@"%@", mySet1);
-filterUsingPredicate:
- удаляет из набора элементы не соответствующие заданному предикату. Метод принимает единственный аргумент - предикат.
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSLog(@"%@", mySet1);
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith 't'"];
[mySet filterUsingPredicate:predicate];
NSLog(@"%@", mySet1); // Набор содержит только один элемент - @"one"
Комбинация и рекомбинация наборов
-unionSet:
- добавляет в текущий набор объекты из переданного. Метод принимает один аргумент - набор добавляемых объектов. Каждый объект из переданного набора , перед добавлением в текущий, захватывается с помощью посылки сообщения retain
.
-minusSet:
- удаляет из текущего набора объекты, которые присутствуют и в переданном и в текущем наборе. Метод принимает один аргумент - набор удаляемых объектов.
-intersectSet:
- удаляет из текущего набора объекты, которые не присутствуют в переданном. Метод принимает один аргумент - набор сравниваемых объектов.
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSMutableSet *mySet2 = [NSSet setWithObjects: @"one", @"three", nil];
[mySet2 minusSet:mySet2];
NSLog(@"%@", mySet1); // Набор содержит элементы: @"one", @"three"
-setSet:
- очищает текущий набор, а затем добавляет объекты из переданного. Каждый объект из переданного набора , перед добавлением в текущий, захватывается с помощью посылки сообщения retain
.