2015-06-05 53 views
-3

我有一个名为Receipt的自定义类。它有另一个类的属性,称为RetailerRetailer有另一个属性retailerName。我得到一个Receipt对象数组。我希望它被排序到一个NSDictionary,其键将是字母,值将是一个Receipt的数组,其对象的retailerName以字母开头,数组按字母顺序排序。如何将对象的NSArray排序为按字母顺序排列的NSDictionary?

我有什么:

[ 
    { 
    "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 
      } 
      ] 
} 

我知道的情况是有点复杂,但我已经尽了最大努力,学解释。如果需要,请求进一步解释。

在此先感谢。

+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]; 
         }]; 

你可以选择在字典中的特定键,并尝试排序它