0

NSString または同じ文字の NSArray で文字を見つける速度に関して、より効率的なものを知っている人はいますか?

正しい値を見つけるための最良かつ最も効率的なアルゴリズムを持っているものを知りたいです。

アルファベット内の文字の位置を効果的に見つけたい。Eたとえば、アルファベットで " " の位置を見つける、@"ABCDE....XYZ"または[NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",...,@"X",@"Y",@"Z"];

検索するならどれがいい?NSStringまたはNSArray?

4

1 に答える 1

3

AZ だけの場合:

NSString *string = @"A";
int position = (int)[string characterAtIndex:0]-64;
NSLog(@"%d", position);

単なる好奇心から:

NSString *alphabetString = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSMutableArray *alphabetArray = [NSMutableArray array];
for(int pos = 0; pos < [alphabetString length]; pos++) {

    [alphabetArray addObject:[alphabetString substringWithRange:NSMakeRange(pos, 1)]];
}

NSString *check = @"A";

// check with rangeOfString
NSDate *start = [NSDate date];
for(int i = 0; i < 1000000; i++) {

    int position = [alphabetString rangeOfString:check].location + 1;
}
NSDate *end = [NSDate date];
NSLog(@"STRING | time needed: %f", [end timeIntervalSinceDate:start]);

// check with indexOfObject
start = [NSDate date];
for(int i = 0; i < 1000000; i++) {

    int position = [alphabetArray indexOfObject:check] + 1;
}
end = [NSDate date];
NSLog(@"ARRAY | time needed: %f", [end timeIntervalSinceDate:start]);

// check with ASCII position
start = [NSDate date];
for(int i = 0; i < 1000000; i++) {

    int position = (int)[check characterAtIndex:0]-64;
}
end = [NSDate date];
NSLog(@"ASCII | time needed: %f", [end timeIntervalSinceDate:start]);

コンソール:

STRING | time needed: 0.156067
ARRAY | time needed: 0.213297
ASCII | time needed: 0.017055
于 2012-07-12T16:54:05.107 に答える