Вычисление простой суммы с помощью основных данных
У меня есть простой хранилище 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];