2011-01-10 10 views
15

私はちょうど始めて、簡単な配列を集計する簡単な方法を探しています。私はキーバリューのコーディングについてリンゴの開発者サイトに目を通してきましたが、私はそれを私の配列にどのように適用するのか、それがこれを合計する適切な方法であるのか理解できません。配列を集計する - Objective-C

キー値のコードで私のつまずくブロックは、.keypathToPropertyです。私は、2D配列でさらに参照する必要があることを理解することができますが、配列コードは表示されません。私はまだそれを把握することはできません。

NSMutableArray *numArray = [NSMutableArray arrayWithCapacity:4]; 
    [numArray addObject:num1]; 
    [numArray addObject:num2]; 
    [numArray addObject:num3]; 
    [numArray addObject:num4]; 

返信いただきありがとうございます。

おかげ

グラハム

答えて

71

それを行うための自動的な方法は次のとおりです。

NSNumber * sum = [numArray valueForKeyPath:@"@sum.self"]; 

しかし、あなたがちょうど出始めている場合、私は、コレクションのキー・パス演算子を避けることをお勧めして行くだろうより簡単な方法:

double sum = 0; 
for (NSNumber * n in numArray) { 
    sum += [n doubleValue]; 
} 
+7

うわあ、私は、すごい、@のsum.self' 'について私は私にはわからないどのくらいのことを思い出しています毎日を知りませんでした。 –

+0

興味深いことに、 "max.self"、 "min.self"などのようなキーもあります... 恐ろしい解決策.. – Ankit

0

スウィフト3:(Dave DeLong's methodは変換):

let sum = (numArray as AnyObject).value(forKeyPath:"@sum.self") as! Double 

これは、Objective-Cの対応だと同様に動作するはずです。スウィフト4では

+1

キーパスを使用する例としてこれを行っていますが、新しいスウィフトリーダーの場合は、代わりにreduceを使用したいかもしれません! 'let sum = numArray.reduce(0){$ 0 + $ 1}' –

+1

@MikeSprague:私はあなたに合っているとは思えませんが、提示される。私はこの方法が好きな理由は、関与するコードの量は、整数と文字列の値が混在している配列ではうまく機能するからです。 –

0

let array = [1,2,3,5] 
let sum = array.reduce(0, {$0 + $1}) 
print(sum) 
関連する問題