2012-04-09 15 views
2

Ich bin neu in Objective-C und iPhoneWie ein zurück NSArray zu einem NSArray hinzuzufügen

ich NSDictionary unter Verwendung von Werten zu sortieren haben und nach, dass ich die Schlüssel, die Werte zu ordnen haben, i sortiert haben das Array.

//getting values 
NSArray* keys1 = [sortDictionary allValues];  
NSArray* sortedArray = [keys1 sortedArrayUsingComparator:^(id a, id b) { 
    return [a compare:b options:NSNumericSearch]; 
}]; 

Mein Problem ist jetzt ich die Schlüssel der Werte von allKeysForObject bekommen:, die eine NSArray zurückgibt.

for(NSString* aStr in sortedArray) { 
    NSLog(@"%@ has value %@", [sortDictionary allKeysForObject:aStr], aStr); 
}  
O/P :- (
    Sourish 
) has value 60 

Vielmehr möchte ich "Sourish" als String und speichern sie auf eine NSArray und als speichern, die NSArray zu NSDictionary oder speichern sowohl Sourish und 60 zu einem anderen NSDictionary

freundlicher Bring mich dazu, unser Problem zu sortieren.

+0

Ich finde die Frage nicht leicht zu folgen. Wenn ich es richtig verstehe, könnte es hilfreich sein, allKeysForObject zu ändern: aStr zu valueForKey: aStr. Das wird einen NSString zurückgeben, wenn Sie das als Schlüssel verwenden. Es ist nicht klar, ob Sie manchmal erwarten, mehrere Kopien desselben Objekts im Wörterbuch zu haben, und wenn Sie dies tun, was Sie dagegen tun wollen. – Obliquely

+0

@Matthew Elton: Ja, ich habe versucht, wenn ich damit versuche, bekomme ich einen Nullwert. – iYahoo

+0

Hoppla. So ist es. Ich denke, Sie möchten vielleicht etwas, das 'anyKeyForObject:' und gibt nur einen Schlüssel zurück. Siehe Antwort unten. – Obliquely

Antwort

2

Dies erhält die Zeichenfolge für Sie durch Blick auf das Array. Sind Sie danach?

NSDictionary* sortDictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"60", @"Sourish", @"45" , @"Peckish", @"25", @"Swordfish", @"15", @"Mashmish", nil]; 

NSArray* keys1 = [sortDictionary allValues];  
NSArray* sortedArray = [keys1 sortedArrayUsingComparator:^(id a, id b) 
{ 
    return [a compare:b options:NSNumericSearch]; 
}]; 

for(NSString* aStr in sortedArray) 
{ 
    NSString* keyForObject = @""; 

    if ([[sortDictionary allKeysForObject: aStr] count] > 0) 
    { 
     keyForObject = [[sortDictionary allKeysForObject: aStr] objectAtIndex: 0]; 
    } 

    NSLog(@"%@ has value %@", keyForObject, aStr); 
} 

Diese Protokolle:

Mashmish has value 15 
Swordfish has value 25 
Peckish has value 45 
Sourish has value 60 
+0

Vielen Dank, es hat wirklich für mich funktioniert. – iYahoo

0

Sie NSMutableArray verwenden können, um Ihre Daten zu speichern, mit addObject: selector oder NSMutableDictionary sowohl als Schlüssel zu speichern, verwenden: Wert pare addObjectsAndKeys: selector

0

„>> ich mit einem NSDictionary unter Verwendung von Werten zu sortieren haben und nach, dass i müssen die Tasten, dass ordnen Werte“

NSArray *allkey =[[NSArray alloc] initWithArray:[sortDictionary keysSortedByValueUsingSelector:@selector(compare:)]] ; 

Implementieren Sie vergleichen Methode,

- (NSComparisonResult)compare:(id)b { 
    return [self compare:b options:NSNumericSearch]; 
} 

Der Allkey ist das Tastenfeld, das anhand von Werten sortiert wird.