如何将NSArray of Objects排序为字母NSDictionary



我有一个名为Receipt的自定义类。它具有另一个称为Retailer的类的属性。Retailer具有另一个称为retailerName的属性。

我得到一个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
          }
          ]
}

我知道情况有点复杂,但我已经尽力解释了。如有需要,要求进一步解释。

提前谢谢。

我解决了我的问题:

以下是我所做的:

@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
Array = [Array
     sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)
                          {
                              NSNumber *number1 = [NSNumber
                              numberWithFloat:[someValue floatValue]];
                             NSNumber *number2 = [NSNumber
                              numberWithFloat:[[somevalue floatValue]];
                              return [number2 compare:number1];
                        }];

您可以在字典中选择特定的键,并尝试对其进行排序

最新更新