2015-06-05 2 views
-3

У меня есть собственный класс под названием Receipt. Он имеет свойство другого класса, называемого Retailer. Retailer имеет другое свойство под названием retailerName.Как отсортировать NSArray объектов в алфавитном NSDictionary?

Я получаю массив из Receipt объектов. Я хочу, чтобы он был отсортирован в NSDictionary, чьими ключами будут алфавиты, а значение будет представлять собой массив Receipt, чей Retailer объект retailerName начинается с алфавита, а массив сортируется в алфавитном порядке.

Что у меня есть:

[ 
    { 
    "retailerName": "Adidas", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "Book My Show", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "Albert-Heijn", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "Amazon", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "BlackBerry", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "Lambhorgini", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "Lewis Outlet", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "Boston Store", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    }, 
    { 
    "retailerName": "Lidl", 
    "totalCost": 392.1, 
    "purchasedOn": 1461218024549 
    } 
] 

Что мне нужно от него:

{ 
    "A": [ 
      { 
       "retailerName": "Adidas", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      }, 
      { 
       "retailerName": "Albert-Heijn", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      }, 
      { 
       "retailerName": "Amazon", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      } 
      ], 
    "B": [ 
      { 
       "retailerName": "BlackBerry", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      }, 
      { 
       "retailerName": "Book My Show", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      }, 
      { 
       "retailerName": "Boston Store", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      } 
      ], 
    "L": [ 
      { 
       "retailerName": "Lambhorgini", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      }, 
      { 
       "retailerName": "Lewis Outlet", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      }, 
      { 
       "retailerName": "Lidl", 
       "totalCost": 392.1, 
       "purchasedOn": 1461218024549 
      } 
      ] 
} 

Я знаю, что сценарий немного сложнее, но я старался изо всех сил, чтобы быть explanative. При необходимости попросите дать дополнительные пояснения.

Заранее спасибо.

+3

ли вы пытались что-нибудь? у вас есть какой-либо код, пожалуйста, поделитесь –

+0

Нет. Мне нечего делить –

+1

Сначала попробуйте сами, если вы столкнулись с какой-либо проблемой, а затем опубликуйте здесь. –

ответ

1

я решил мою проблему:

Вот что я сделал:

@implementation NSMutableDictionary (DictionaryForSectionIndex) 

+(NSMutableDictionary *)createDictionaryForSectionIndex:(NSArray *)array 
{ 
    NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
    for (char firstChar = 'a'; firstChar <= 'z'; firstChar++) 
    { 
     //NSPredicates are fast 
     NSString *firstCharacter = [NSString stringWithFormat:@"%c", firstChar]; 
     NSArray *content = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"retailerName beginswith[cd] %@", firstCharacter]]; 
     NSMutableArray *mutableContent = [NSMutableArray arrayWithArray:content]; 

     if ([mutableContent count] > 0) 
     { 
      NSString *key = [firstCharacter uppercaseString]; 
      [dict setObject:mutableContent forKey:key]; 
     } 
    } 
    return dict; 
} 

@end 
0
Array = [Array 
    sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) 
          { 
           NSNumber *number1 = [NSNumber 
           numberWithFloat:[someValue floatValue]]; 
          NSNumber *number2 = [NSNumber 
           numberWithFloat:[[somevalue floatValue]]; 

           return [number2 compare:number1]; 
         }]; 

Вы можете выбрать на конкретном ключе в словаре и попытаться сортировать его

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