5
사전 배열을 작은 값으로 사전에 분할하는 좋은 해결책을 찾고 있습니다.NSArray를 객체 간의 공통 키 - 값 쌍을 사용하여 더 작은 키 값 코드 배열로 분할
{
"field": [
{
"id": 6,
"name": "Andrea"
},
{
"id": 67,
"name": "Francesco"
},
{
"id": 8,
"name": "Maria"
},
{
"id": 6,
"name": "Paolo"
},
{
"id": 67,
"name": "Sara"
}
]
}
내가 같은 결과를 얻으려면 싶습니다 :
여기 는 예를 들어 내가 JSON, 나는이에서 시작이 코드를 사용하여 작동 관리되는
{
"field": [
{
"6": [
{
"name": "Andrea",
"id": 6
},
{
"name": "Paolo",
"id": 6
}
],
"67": [
{
"name": "Sara",
"id": 67
},
{
"name": "Francesco",
"id": 67
}
],
"8": [
{
"name": "Maria",
"id": 8
}
]
}
]
}
을하지만 존재하는 경우 궁금 해요 더 정확하고 빠른 무언가 :
NSArray * array = ...;
NSSortDescriptor *sorter1=[[NSSortDescriptor alloc]initWithKey:@"id" ascending:YES selector:@selector(compare:)];
NSSortDescriptor *sorter2=[[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptors=[NSArray arrayWithObjects:sorter1,sorter2,nil];
array = [array sortedArrayUsingDescriptors:sortDescriptors];
//////////////////////////////SPLITTER
NSMutableArray * subcategorySplittedArray = [[NSMutableArray alloc]initWithCapacity:30];
NSNumber * lastID=[[array objectAtIndex:0]objectForKey:@"id"];
NSMutableArray * shopArray = [[NSMutableArray alloc]initWithCapacity:100];
NSMutableDictionary * catDict = nil;
for (NSDictionary * dict in array) {
NSNumber * catID = [dict objectForKey:@"id"];
if ([lastID isEqualToNumber:catID]) {
[shopArray addObject:dict];
}
else {
catDict = [[NSMutableDictionary alloc]init ];
[catDict setObject:[shopArray copy] forKey:lastID];
[subcategorySplittedArray addObject:catDict];
[shopArray removeAllObjects];
[shopArray addObject:dict];
lastID = catID;
}
}
catDict = [[NSMutableDictionary alloc]init ];
[catDict setObject:[shopArray copy] forKey:lastID];
[subcategorySplittedArray addObject:catDict];
////////////////////////////////////
return subcategorySplittedArray;
}
감사 켄, 나는 벤치 두하고 그 결과를 게시는 들으 – Andrea
내가 시뮬레이션에 작은 벤치를 변경 한 것입니다 :
는 하나 개의 통과를 만들기 위해 업데이트 된 원래의 방법은 소요 0.000098 제안한 건 0.002735. 주된 차이점은 내 것과 함께 당신이 단지 한 번 순환한다는 것입니다. 당신이 사용하는 술어를 ID 번호와 동일한 횟수만큼 순환시킵니다. – Andrea
참. 나는 패스를 한 번만 내 방법으로 내 대답을 업데이 트했습니다. –