ich eine schnelle Methode habe einen Quell-Array (von Objekten, die alle in der falschen Reihenfolge sind) zu nehmen und ein Referenzfeld (das hat Objekte in einem gewünschten (und völlig willkürlich) Reihenfolge) und gibt ein Array zurück, in dem die Elemente des Quell-Arrays neu organisiert wurden, damit sie mit dem Referenz-Array übereinstimmen.
- (NSArray *) reorderArray:(NSArray *)sourceArray toArray:(NSArray *)referenceArray
{
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [referenceArray count]; i++)
{
if ([sourceArray containsObject:[referenceArray objectAtIndex:i]])
{
[returnArray addObject:[arrReference objectAtIndex:i]];
}
}
return [returnArray copy];
}
Beachten Sie, dass dies sehr zerbrechlich ist. Es verwendet die containsObject:
Methode, die schließlich NSObject
's isEqual:
aufrufen wird. Grundsätzlich sollte es gut für Arrays von NSString
s, NSNumber
s und vielleicht NSDate
s funktionieren (habe das noch nicht probiert), aber darüber hinaus, YMMV. Ich stelle mir vor, wenn Sie versuchen, Arrays von UITableViewCell
s oder ein anderes wirklich komplexes Objekt zu übergeben, würde es sich selbst total abstürzen und entweder Total Crash oder Total-Müll zurückgeben. Wenn Sie etwas tun möchten, übergeben Sie beispielsweise ein Array von NSDate
s als Referenz-Array und ein Array von NSString
als Quell-Array. Wenn das Quell-Array Elemente enthält, die nicht im Referenz-Array enthalten sind, werden sie einfach verworfen. Man könnte einige dieser Probleme lösen, indem man ein wenig zusätzlichen Code hinzufügt.
All das gesagt, wenn Sie versuchen, etwas Einfaches zu tun, sollte es gut funktionieren. In Ihrem Fall könnten Sie das Referenz-Array aufbauen, während Sie Ihre setValue:forKey:
Schleife durchlaufen.
NSMutableArray *referenceArray = [[NSMutableArray alloc] init];
NSMutableDictionary *yourDictionary = [[ NSMutableDictionary alloc] init];
for (//whatever you are looping through here)
{
[yourDictionary setValue://whatever forKey:key];
[referenceArray addObject:key];
}
Dann, wenn Sie eine Schleife über Ihre Artikel in der gewünschten Reihenfolge kamen sie in, die Sie gerade
for (NSString *key in [self reorderArray:[myDict allKeys] toArray:referenceArray])
Die Schlüssel sind nicht festgelegt, sie sind dynamisch. – Matrix