SOAP Web サービスを呼び出して XML の長いリストを取得するアプリがあり、アプリはそれを解析してオブジェクトNSArray
の. NSDictionary
には賃貸マンション情報のNSArray
リストが含まれており、それぞれが に格納されていNSDictionary
ます。
リスト全体には、10 の異なるタイプのアパートメント (つまり、2 部屋、3 部屋) が含まれている可能性があり、オブジェクトにキー「roomType」を持つ Room-Type に基づいて、NSArray
小さなに分割する必要があります。NSArray
NSDictionary
現在、私たちのアルゴリズムは
[NSArray valueForKeyPath:@"@distinctUnionofObjects.room-type"]
一意の部屋タイプ値のリストを取得するために使用します。- 一意の部屋タイプ値のリストをループします
- 一意の部屋タイプの値ごと
NSPredicate
に、元のリストから一致するアイテムを取得するために使用します
コードは次のとおりです (わかりやすくするために名前を変更しています)。
NSArray *arrOriginal = ... ...; // Contains the Parsed XML list
NSMutableArray *marrApartmentsByRoomType = [NSMutableArray arrayWithCapacity:10];
NSMutableArray *arrRoomTypes = [arrOriginal valueForKeyPath:@"distinctUnionOfObjects.roomType"];
for(NSString *strRoomType in arrRoomTypes) {
NSPredicate *predicateRoomType = [NSPredicate predicateWithFormat:@"roomType=%@", strRoomType];
NSArray *arrApartmentsThatMatchRoomType = [arrOriginal filteredArrayUsingPredicate:predicateRoomType]; // TAKES A LONG TIME EACH LOOP-ROUND
[marrApartmentsByRoomType addObject:arrApartmentsThatMatchRoomType];
}
ただし、元のリストには大量の (>100,000) アイテムが含まれている可能性があるため、ステップ 3 には時間がかかります。NSPredicate
各キー値のリスト全体を通過するようです。キーに基づいて、大きなものNSArray
を小さなものに分割するより効率的な方法はありますか?NSArray
NSDictionary