3

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

例如,如果我有一个类似的数组

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

在新的 NSArray 中会是这样

"a, b, c, d"

任何帮助将不胜感激。

4

4 回答 4

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];
}
于 2012-11-06T22:06:00.103 回答
2

NSString+字母索引.h

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

NSString+字母索引.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"]];
于 2014-07-01T21:39:39.093 回答
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]];
}
于 2012-11-06T22:13:00.227 回答
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);

这使用 Set 来跟踪已经过去抛出的事件。当它不存在时,它将它们放入一个新数组中。

于 2012-11-06T22:14:19.807 回答