Положение персонажа в NSString против NSArray - производительность / эффективность
Кто-нибудь знает, что является более эффективным в отношении скорости поиска символа в NSString или в NSArray тех же символов?
Я хочу знать, какой из них имеет лучший и самый эффективный алгоритм для поиска правильного значения.
Я эффективно хочу найти положение символа в алфавите. например, найти позицию "E
"в алфавите @"ABCDE....XYZ"
или же [NSArray arrayWithObjects:@"A",@"B",@"C",@"D",@"E",...,@"X",@"Y",@"Z"];
Какой из них лучше для поиска? NSString или NSArray?
1 ответ
Решение
Если это просто 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