Tôi có thể sắp xếp các số NSDictionary
trên cơ sở khóa không?Tôi có thể sắp xếp NSDictionary trên cơ sở khóa trong Objective-C không?
Trả lời
Bạn có thể sắp xếp các phím và sau đó tạo một NSMutableArray
bằng cách lặp lại chúng.
NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(compare:)];
NSMutableArray *sortedValues = [NSMutableArray array];
for (NSString *key in sortedKeys)
[sortedValues addObject: [dict objectForKey: key]];
Tôi đã sử dụng câu trả lời của bạn trong câu trả lời cho http://stackoverflow.com/a/13406407/257533 –
Vì vậy, đây có phải là câu trả lời đúng hay không? có nhiều phiếu bầu, nhưng không chấp nhận? –
Đây là câu trả lời đúng. Đáng buồn thay, phương thức dễ dàng hơn (trong iOS 7) của '[dictionary keysSortedByValueUsingSelector: @selector (compare :)]' không hoạt động. Vì lý do nào đó, nó cho tôi kết quả gần như ngẫu nhiên theo thứ tự. Tôi tự hỏi nếu 'keysSortedByValueUsingSelector:' làm một cái gì đó mà nó chèn vào mảng dựa trên giá trị cuối cùng của mảng, đó là loại vô ích. – mikeho
Nó là đơn giản hơn nhiều để sử dụng objectsForKeys:notFoundMarker:
cho rằng
NSDictionary *yourDictionary;
NSArray *sortedKeys = [yourDictionary.allKeys sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]]];
// As we using same keys from dictionary, we can put any non-nil value for the notFoundMarker, because it will never used
NSArray *sortedValues = [yourDictionary objectsForKeys:sortedKeys notFoundMarker:@""];
Có phải câu trả lời cung cấp cho bạn những thông tin đúng không? Có thể bạn có thể đánh dấu nó là câu trả lời để câu hỏi này sẽ được đánh dấu là đã được giải quyết. –