Aralarında ortak bir değere sahip küçük bir sözlükte bir sözlük dizisini ayırmak için iyi bir çözüm bulmaya çalışıyorum.Nesneler arasında ortak anahtar/değer çiftini kullanarak daha küçük anahtar değer kodlu dizilerde bir NSArray bölme
{
"field": [
{
"id": 6,
"name": "Andrea"
},
{
"id": 67,
"name": "Francesco"
},
{
"id": 8,
"name": "Maria"
},
{
"id": 6,
"name": "Paolo"
},
{
"id": 67,
"name": "Sara"
}
]
}
ben böyle bir sonuç almak istiyoruz:
İşte bir örnek i JSON, ben bu başlayıp bu kodu kullanarak, çalışıyor yönetilen
{
"field": [
{
"6": [
{
"name": "Andrea",
"id": 6
},
{
"name": "Paolo",
"id": 6
}
],
"67": [
{
"name": "Sara",
"id": 67
},
{
"name": "Francesco",
"id": 67
}
],
"8": [
{
"name": "Maria",
"id": 8
}
]
}
]
}
ama varsa merak ediyorum daha doğru ve hızlı bir şey:
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;
}
Teşekkür Ken, tezgah iki ve sonucu sonrası, thx – Andrea
Ben sim biraz tezgah yaptık olacaktır:
sadece bir geçiş yapmak için Güncelleme orijinal yöntem alır 0,000098, 0,002735'i önerdi. Sanırım ana fark, benimkiyle sadece bir kez devir edersiniz, bunu kullanarak bir kaç kez döngülerin sayısına eşit bir döngü uygularsınız. – Andrea
Doğru. Cevabımı yalnızca bir geçiş yapan bir yaklaşımla güncelledim. –