2012-11-06 40 views
3

我有一个NSString值的排序数组,我想知道如何捕获每个字符串的第一个字母只有当第一个字母不同,并将其放入一个新的NSArray 。如何捕获每个数组条目的第一个字母

举例来说,如果我有一个数组,就像喜欢

"a, aaa, aaaa, b, c, d, dd, ddd" 

它会是这样,在新的NSArray

"a, b, c, d" 

任何帮助将不胜感激。

+0

创建一个空的mutableArray。遍历排序的一个,跟踪previousFirstLetter并将其与当前的比较,如果不同,则将该字母添加到您的mutableArray并更新previousFirstLetter。 – yuf

回答

9

事情是这样的:

- (NSArray *)indexLettersForStrings:(NSArray *)strings { 
    NSMutableArray *letters = [NSMutableArray array]; 
    NSString *currentLetter = nil; 
    for (NSString *string in strings) { 
     if (string.length > 0) { 
      NSString *letter = [string substringToIndex:1]; 
      if (![letter isEqualToString:currentLetter]) { 
       [letters addObject:letter]; 
       currentLetter = letter; 
      } 
     } 
    } 
    return [NSArray arrayWithArray:letters]; 
} 
+0

opps对不起,最近的答复..一直在尝试一堆东西..然后看到这个尝试它,它完美的作品!非常感谢:) – HurkNburkS

0
NSArray *array = [NSArray arrayWithObjects:@"a", @"aaa", @"aaaa",@"b", @"c", @"d", @"dd", @"ddd", nil]; 
BOOL control = YES; 
NSMutableArray *array2 = [NSMutableArray array]; 
for (int i = 0; i<array.count; i++) { 
    for (int j = 0; j<array2.count;j++){ 
     if ([[array2 objectAtIndex:j]isEqualToString:[[array objectAtIndex:i]substringToIndex:1]]){ 
      control = NO; 
     } 
     else 
      control = YES; 
    } 
    if (control) 
     [array2 addObject:[[array objectAtIndex:i]substringToIndex:1]]; 
} 
0

试试这个:

NSArray *arr = @[@"a", @"aaa", @"aaaa", @"b", @"c", @"d", @"dd", @"ddd"]; 
NSMutableArray *newArr = [NSMutableArray array]; 
NSMutableSet *set = [NSMutableSet set]; 

for (NSString *str in arr) 
{ 
    if (![set containsObject:[str substringToIndex:1]]) 
     [newArr addObject:[str substringToIndex:1]]; 
    [set addObject:[str substringToIndex:1]]; 

} 

NSLog(@"%@", newArr); 

这使用一组跟踪已经扔了过去发生的。当它不存在时,它将它们放入一个新的数组中。

+0

用'NSSet'做'containsObject:'然后'addObject:'是多余的。他们还需要一个'NSArray'作为最终结果。请参阅下面的答案。 – WDUK

+0

以及他确实要求答案是在一个新的阵列 –

2

的NSString + LetterIndex.h

@interface NSString (LetterIndex) 
@property (nonatomic, readonly) NSString * firstLetter; 
@end 

的NSString + LetterIndex.m

@implementation NSString (LetterIndex) 

- (NSString *)firstLetter 
{ 
    return self.length ? [self substringToIndex:1] : @""; 
} 

你的方法:

- (NSArray *)indexLettersForStrings:(NSArray *)strings { 
    NSSet * distinctValues = [NSSet setWithArray:[strings valueForKey:@"firstLetter"]]; 
    return [[distinctValues allObjects] sortedArrayUsingSelector:@selector(compare:)] 
} 

此外,如果有自定义类的一些对象,并希望通过一些字符串参数的第一个字母对它们进行分组,您可以使用:

NSSet * distinctValues = [NSSet setWithArray:[objects valueForKeyPath:@"myStringParam.firstLetter"]]; 
相关问题