何を試しましたか?
回答に直接入力されたコードがいくつかあるため、テストされていません。
元の配列に名前を付けていないので、次のように仮定します。
NSArray *originalArray;
結果を保存するには、変更可能な辞書が必要です。
NSMutableDictionary *points = [NSMutableDictionary new];
次に、元の配列のすべての要素を処理する必要があります。これは辞書です。
for(NSDictionary *item in originalArray)
{
points
に一致する配列の現在のエントリを取得しitem
ます。エントリにタイプを指定しないため、次を使用しますid
。
id currentUser = [item objectForKey:@"user"];
NSMutableArray *currentValues = [points objectForKey:currentUser];
これが最初に出現する場合は、currentUser
にcurrentValues
なり、値nil
の配列を作成して次のアドレスに追加する必要があります。p1
points
if (currentValues == nil)
[points addObject:[NSMutableArray arrayWithObject:[item objectForKey:@"p1"]
forKey:currentUser
]
]
p1
それ以外の場合は、値を配列に追加するだけです。
else
[currentValues setObject:[item objectForKey:@"p1"]];
ループを閉じてキーを取得します。
}
NSArray *keys = [points allKeys];
Xcode 4.5を使用している場合は、その一部に最新の構文を使用できます。
NSMutableDictionary *points = [NSMutableDictionary new];
for(NSDictionary *item in originalArray)
{
id currentUser = item[@"user"];
NSMutableArray *currentValues = points[currentUser];
if (currentValues == nil)
points[currentUser] = [NSMutableArray arrayWithObject:item[@"p1"];
else
[currentValues addObject:item[@"p1"]];
}
NSArray *keys = [points allKeys];
HTH