Вопрос: Вычисление простой суммы с помощью основных данных


У меня есть простой хранилище Core Data с сущностью Cost с целым значением «value». Я хочу суммировать все суммы расходов в моем магазине, что эквивалентно следующей заявке sql:

SELECT sum(value) FROM costs

Как сделать это наиболее эффективным способом в Cocoa Touch? Используя Core Data? Или просто получить все сущности стоимости и выполнить суммирование вручную?


11


источник


Ответы:


Лучший способ - использовать выборка для определенных значений  и предоставить NSExpressionDescription с sum: функция ,

Когда вы выполняете выборку, вы получаете один массив элементов, содержащий словарь, ключи которого соответствуют описаниям выражений и значениями которых являются результаты этих выражений. В этом случае вы получите sum ключ, значение которого будет представлять собой сумму атрибутов данного выражения.


11



Есть специальные операторы кодирования ключевых значений  которые работают над массивами и наборами, и один из них @sum, Если вы выберете все объекты, которые вы хотите суммировать, в набор, называемый costs, и если атрибут, который вы хотите суммировать для каждого объекта, value, вы можете использовать оператор @sum следующим образом:

float theSum = [costs valueForKeyPath:@"@sum.value"];

16



В документации Apple говорится: «Оператор @sum возвращает сумму значений свойства, указанных путём ключей справа от оператора. Каждый номер преобразуется в double, вычисляется сумма значений, а общая сумма завернутый как экземпляр NSNumber и возвращенный ».

При этом вы можете использовать «doubleValue» вместо «intValue» ... или вы даже можете использовать «floatValue» или любое допустимое преобразование nsnumber, чтобы получить тип, с которым вы собираетесь работать.

Таким образом, следующее будет отлично работать: `введите код здесь:

 double sumOfCostValues = [[costs valueForKeyPath:@"@sum.value"] doubleValue];

или:

 float sumOfCostValues = [[costs valueForKeyPath:@"@sum.value"] floatValue];

0