如何将对象的 NSArray 排序为字母 NSDictionary?

How to sort an NSArray of Objects to alphabetic NSDictionary?

我有一个名为 Receipt 的自定义 class。它有另一个 class 的 属性,叫做 RetailerRetailer 还有一个 属性 叫做 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
          }
          ]
}

我知道情况有点复杂,但我已尽力解释清楚。如果需要,请寻求进一步的解释。

提前致谢。

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

                              return [number2 compare:number1];
                        }];

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

我解决了我的问题:

这是我所做的:

@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