2016-02-21 3 views
1

У меня есть NSDictionaryNSDictionary отсортировано по значению массива?

NSDictionary *sort = @{@"key1": @[@"one", @"two"], 
         @"key2": @[@"o", @"t", @"p"]}; 

И я хочу сортировки его по array.count. Решено использовать сортировочный пузырь, за которым следует добавление элементов std :: map с момента его заказа. Но, может быть, есть некоторые стандартные решения?

ответ

0

Я не думаю, что вы можете сортировать ключи внутри словаря, однако, если вы хотите, массив ключей в порядке, основанном на подсчете их значений массивов вы можете сделать что-то вроде этого:

NSArray *sortedKeysArray = [dictionary keysSortedByValueUsingComparator: ^(NSArray *obj1, NSArray *obj2) { 
      if (obj1.count > obj2.count) { 
       return (NSComparisonResult)NSOrderedDescending; 
      } 
      if (obj1.count < obj2.count) { 
       return (NSComparisonResult)NSOrderedAscending; 
      } 
      return (NSComparisonResult)NSOrderedSame; 
     }]; 

После того, как у вас есть ключи в порядке, вы можете пронести через них так:

for (NSString *key in sortedKeysArray) { 
    NSArray *array = [dictionary objectForKey:key] 
    // Do something now that you have the arrays in order from smallest to largest 
} 
+0

его отличная работа! Спасибо! – nickheck

+0

Как ни странно, NSOrderedDescending работает нормально, но NSOrderedAscending, сортируется некорректно. – nickheck

+0

Что происходит точно? – RDSpinz

Смежные вопросы