Операторы набора
Операторы набора позволяют действиям выполняться на элементах ключевой нотации пути использования набора и оператора действия. Эта статья описывает доступных операторов набора, ключевые пути в качестве примера и результаты, к которым они привели бы.
Операторы набора специализированы ключевые пути, передающиеся как параметр 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.