Быстрый способ суммировать свойства всех объектов в NSSet? - PullRequest
7 голосов
/ 10 июля 2009

Я думал, что есть способ быстро попросить NSSet опросить своих членов и вернуть сумму, скажем, свойства NSInteger в каждом из его объектов, но я вполне могу спутать это с Mac OS X сторона вещей. Существует ли это в Cococa Touch?

Самое близкое, что я могу найти, это objectEnumerator, в результате чего, я полагаю, я мог бы прокручивать каждый объект и увеличивать свою собственную переменную. Существует ли лучший способ?

Ответы [ 2 ]

15 голосов
/ 10 июля 2009

Если вы пытаетесь найти сумму заданного свойства (theIntegerPropertyToSum) для каждого члена класса, производного от массива / набора, который соответствует KVC (theSet), вы можете сделать следующее:

NSNumber* theSum = [theSet valueForKeyPath:@"@sum.theIntegerPropertyToSum"];
0 голосов
/ 10 июля 2009

Почему бы не использовать простую цель C (2)?

NSInteger theSum = 0;
for (id obj in theSetOrArray)
    theSum += obj.theIntegerPropertyToSum;

Неудобство: Если вам нравится считать строки, то это выглядит длиннее. Есть ли другие недостатки - интересно, что происходит с методом KVC с объектами, у которых нет обязательного свойства 'theIntegerPropertyToSum'?

Преимущество: Могу поспорить, что это отладки и тесты производительности проще. Плюс, когда кто-то еще прочитает ваш код через год или два, он узнает, что здесь происходит - видели ли они когда-либо строку цели C или нет, это выглядит так, как на самом деле происходит.

...