Операторы набора

Операторы набора позволяют действиям выполняться на элементах ключевой нотации пути использования набора и оператора действия. Эта статья описывает доступных операторов набора, ключевые пути в качестве примера и результаты, к которым они привели бы.

Операторы набора специализированы ключевые пути, передающиеся как параметр valueForKeyPath: метод. Оператор указан строкой, которой предшествует знак at sign (@). Ключевой путь на левой стороне оператора набора, если есть определяет массив или набор, относительно получателя, использующегося в работе. Ключевой путь на правой стороне оператора указывает свойство набора, который использует оператор. Рисунок 1 иллюстрирует ключевой формат пути оператора.

  Формат пути ключа Operator рисунка 1

Все операторы набора, за исключением @count, потребуйте ключевого пути направо от оператора набора.

Тип объектного значения возвратился, зависит от оператора:

Данные, используемые в примерах

Каждый из операторов в Простых Операторах Набора, Объектных Операторах и Операторах Массива и Набора включает отрывок примера кода с помощью ключевого пути, содержащего оператора, а также результаты, которые были бы сгенерированы. Для иллюстрирования этого, необходимо использовать теоретический класс, в этом случае Transaction класс. Transaction класс инкапсулирует самую простую форму чековой книжки entires. Это содержит три свойства: payee ( NSString), amount ( NSNumber), и date ( NSDate).

Transaction экземпляры сохранены в объекте коллекции, присваивающемся гипотетической переменной transactions, который является экземпляром NSArray. Для оператора, воздействующего на NSSet набор, можно предположить что transactions набор является экземпляром NSSet. Это обсуждено в соответствующих операторах.

Для предоставления данных результатов для действия оператора с transactions демонстрационные данные набора требуются. Каждая строка в Таблице 1 содержит данные для экземпляра Transaction. Значения в таблице были отформатированы (где применимо) для создания их проще понять. Результаты, выведенные на экран примерами, также отформатированы.

Табличные 1  данные В качестве примера для Transactions объекты

payee значения

amount значения (отформатированный как валюта)

date значения (отформатированный как день месяца, год)

Green Power

$120.00

Dec 1, 2009

Green Power

$150.00

Jan 1, 2010

Green Power

$170.00

Feb 1, 2010

Car Loan

$250.00

Jan 15, 2010

Car Loan

$250.00

Feb 15, 2010

Car Loan

$250.00

Mar 15, 2010

General Cable

$120.00

Dec 1, 2009

General Cable

$155.00

Jan 1, 2010

General Cable

$120.00

Feb 1, 2010

Mortgage

$1,250.00

Jan 15, 2010

Mortgage

$1,250.00

Feb 15, 2010

Mortgage

$1,250.00

Mar 15, 2010

Animal Hospital

$600.00

Jul 15, 2010

Простые операторы набора

Простые операторы набора воздействуют на свойства направо от оператора или в массиве или устанавливают.

@avg

@avg использование оператора valueForKeyPath: для указывания значений свойством, указанным ключевым путем направо от оператора, преобразовывает каждого в a double, и возвращает среднее значение как экземпляр NSNumber. В случае, где значение nil, 0 принят вместо этого.

Следующий пример возвращает среднее значение суммы транзакции для объектов в transactions:

NSNumber *transactionAverage = [transactions valueForKeyPath:@"@avg.amount"];

Результат форматирования transactionAverage 456,54$.

@count

@count оператор возвращает число объектов в левом ключевом наборе пути как экземпляр NSNumber, ключевой путь направо от оператора проигнорирован.

Следующий пример возвращает число Transaction объекты в transactions:

NSNumber *numberOfTransactions = [transactions valueForKeyPath:@"@count"];

Значение numberOfTransactions 13.

@max

@max оператор сравнивает значения свойства, указанного ключевым путем направо от оператора, и возвращает найденное максимальное значение. Максимальное значение определяется с помощью compare: метод объектов в указанном ключевом пути. Сравненные объекты свойства должны поддерживать сравнение друг с другом. Если значение правой стороны ключевого пути nil, это проигнорировано.

Следующий пример возвращает максимальное значение значений даты (дата последней транзакции) для Transaction объекты в transactions:

NSDate *latestDate = [transactions valueForKeyPath:@"@max.date"];

latestDate (отформатированное) значение 15 июля 2010.

@min

@min оператор сравнивает значения свойства, указанного ключевым путем направо от оператора, и возвращает найденное минимальное значение. Минимальное значение определяется с помощью compare: метод объектов в указанном ключевом пути. Сравненные объекты свойства должны поддерживать сравнение друг с другом. Если значение правой стороны ключевого пути nil, это проигнорировано.

Следующий пример возвращает минимальное значение (дата самой ранней транзакции) date свойство для Transaction объекты в transactions:

NSDate *earliestDate = [transactions valueForKeyPath:@"@min.date"];

earliestDate (отформатированное) значение 1 декабря 2009.

@sum

@sum оператор возвращает сумму значений свойства, указанного ключевым путем направо от оператора. Каждое число преобразовывается в a double, сумма значений вычислена, и общее количество обертывается как экземпляр NSNumber и возвратился. Если значение правой стороны ключевого пути nil, это проигнорировано.

Следующий пример возвращает сумму amounts свойство для транзакций в transactions:

NSNumber *amountSum = [transactions valueForKeyPath:@"@sum.amount"];

Получающееся amountSum (отформатированное) значение составляет 5 935,00$.

Объектные операторы

Объектные операторы обеспечивают результаты, когда они применяются к единственному экземпляру набора.

@distinctUnionOfObjects

@distinctUnionOfObjects оператор возвращает массив, содержащий отдельные объекты в свойстве, указанном ключевым путем направо от оператора.

Следующий пример возвращается payee значения свойств для транзакций в transactions с любыми двойными удаленными значениями:

NSArray *payees = [transactions valueForKeyPath:@"@distinctUnionOfObjects.payee"];

Получающееся payees массив содержит следующие строки: Автокредит, General Cable, Больница для Животных, Зеленое Питание, Ипотека.

@unionOfObjects оператор подобен, но не удаляет двойные объекты.

@unionOfObjects

@unionOfObjects оператор возвращает массив, содержащий отдельные объекты в свойстве, указанном ключевым путем направо от оператора. В отличие от @distinctUnionOfObjects, не удалены двойные объекты.

Следующий пример возвращается payee значения свойств для транзакций в transactions:

NSArray *payees = [transactions valueForKeyPath:@"@unionOfObjects.payee"];

Получающееся payees массив содержит следующие строки: Зеленое Питание, Зеленое Питание, Зеленое Питание, Автокредит, Автокредит, Автокредит, General Cable, General Cable, General Cable, Ипотека, Ипотека, Ипотека, Больница для Животных.

@distinctUnionOfArrays оператор подобен, но удаляет двойные объекты.

Массив и операторы набора

Массив и операторы набора воздействуют на вложенные наборы, т.е. набор, где каждая запись содержит набор.

Переменная arrayOfTransactions используется в примере для каждого оператора. Это - массив, содержащий два массива Transaction объекты.

Следующий фрагмент кода показывает, как был бы создан вложенный набор:

// Create the array that contains additional arrays.
self.arrayOfTransactionsArray = [NSMutableArray array];
 
// Add the array of objects used in the above examples.
[arrayOfTransactionsArray addObject:transactions];
 
// Add a second array of objects; this array contains alternate values.
[arrayOfTransactionsArrays addObject:moreTransactions];

Первый массив Transaction объекты содержат данные, перечисленные в Таблице 1 и втором массиве (moreTransactions) содержит Transaction объекты с гипотетическими данными в Таблице 2.

  Гипотетическая таблица 2 Transaction данные в moreTransactions массив

payee значения

amount значения (отформатированный как валюта)

date значения (отформатированный как день месяца, год)

General Cable - Cottage

$120.00

Dec 18, 2009

General Cable - Cottage

$155.00

Jan 9, 2010

General Cable - Cottage

$120.00

Dec 1, 2010

Second Mortgage

$1,250.00

Nov 15, 2010

Second Mortgage

$1,250.00

Sep 20, 2010

Second Mortgage

$1,250.00

Feb 12, 2010

Hobby Shop

$600.00

Jun 14, 2010

@distinctUnionOfArrays

@distinctUnionOfArrays оператор возвращает массив, содержащий отдельные объекты в свойстве, указанном ключевым путем направо от оператора.

Следующий пример кода возвратит отличные значения payee свойство во всех массивах с arrayOfTransactionsArrays:

NSArray *payees = [arrayOfTransactionsArrays valueForKeyPath:@"@distinctUnionOfArrays.payee"];

Получающееся payees массив содержит следующие значения: Магазин Хобби, Ипотека, Больница для Животных, Вторая Ипотека, Автокредит, General Cable - Дом, General Cable, Зеленое Питание.

@unionOfArrays оператор подобен, но не удаляет двойные объекты.

@unionOfArrays

@unionOfArrays оператор возвращает массив, содержащий объекты в свойстве, указанном ключевым путем направо от оператора. В отличие от этого @distinctUnionOfArrays, двойные объекты не удалены.

Следующий пример кода возвратит значения payee свойство во всех массивах с arrayOfTransactionsArrays:

NSArray *payees = [arrayOfTransactionsArrays valueForKeyPath:@"@unionOfArrays.payee"];

Получающееся payees массив содержит следующие значения: Зеленое Питание, Зеленое Питание, Зеленое Питание, Автокредит, Автокредит, Автокредит, General Cable, General Cable, General Cable, Ипотека, Ипотека, Ипотека, Больница для Животных, General Cable - Дом, General Cable - Дом, General Cable - Дом, Вторая Ипотека, Вторая Ипотека, Вторая Ипотека, Магазин Хобби.

@distinctUnionOfSets

@distinctUnionOfSets оператор возвращает набор, содержащий отдельные объекты в свойстве, указанном ключевым путем направо от оператора.

Этот оператор работает то же как @distinctUnionOfArrays, за исключением того, что это ожидает NSSet экземпляр, содержащий NSSet экземпляры Transaction объекты, а не массивы. Это возвращается NSSet экземпляр. Используя набор данных в качестве примера, возвращенный набор содержал бы результаты как показанных в @distinctUnionOfArrays.