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

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

SELECT sum(value) FROM costs

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

или

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