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

Все операторы набора, за исключением @count, потребуйте ключевого пути направо от оператора набора.
Тип объектного значения возвратился, зависит от оператора:
Простые возвращаемые строки операторов набора, числа или даты в зависимости от правого ключа значения (см. Простых Операторов Набора).
Возразите, что операторы возвращаются
NSArrayэкземпляр, также, как и объектные операторы (см. Объектных Операторов).Массив и операторы набора возвращают массив или устанавливают объект, в зависимости от оператора (см. Операторов Массива и Набора).
Данные, используемые в примерах
Каждый из операторов в Простых Операторах Набора, Объектных Операторах и Операторах Массива и Набора включает отрывок примера кода с помощью ключевого пути, содержащего оператора, а также результаты, которые были бы сгенерированы. Для иллюстрирования этого, необходимо использовать теоретический класс, в этом случае Transaction класс. Transaction класс инкапсулирует самую простую форму чековой книжки entires. Это содержит три свойства: payee ( NSString), amount ( NSNumber), и date ( NSDate).
Transaction экземпляры сохранены в объекте коллекции, присваивающемся гипотетической переменной transactions, который является экземпляром NSArray. Для оператора, воздействующего на NSSet набор, можно предположить что transactions набор является экземпляром NSSet. Это обсуждено в соответствующих операторах.
Для предоставления данных результатов для действия оператора с transactions демонстрационные данные набора требуются. Каждая строка в Таблице 1 содержит данные для экземпляра Transaction. Значения в таблице были отформатированы (где применимо) для создания их проще понять. Результаты, выведенные на экран примерами, также отформатированы.
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Простые операторы набора
Простые операторы набора воздействуют на свойства направо от оператора или в массиве или устанавливают.
@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.
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@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.