我不确定我的解决方案是否是最好的方法,但它可以暂时解决您的问题 :)。
1) 首先我编写了一个函数来获取字符串中 @ 字符之前的数字,然后我实现了简单的 SELECTION SORT 算法来使用该函数对数组进行排序。
- (NSString*)getSubStringForString:(NSString*)value {
// First we will cut the frame_ string
NSMutableString *trimmedString = [NSMutableString stringWithString:[value substringWithRange:NSMakeRange(6, [value length]-6)]];
// New String to contain the numbers
NSMutableString *newString = [[NSMutableString alloc] init];
for (int i = 0; i < [trimmedString length] ; i++) {
NSString *singleChar = [trimmedString substringWithRange:NSMakeRange(i, 1)];
if (![singleChar isEqualToString:@"@"]) {
[newString appendString:singleChar];
} else {
break;
}
}
return newString;
}
这是排序算法的选择实现。主要逻辑在for循环中。可以复制 viewDidLoad 方法中的代码进行测试。
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"frame_10@3x.png",@"frame_5@3x.png",
@"frame_3@3x.png", @"frame_19@3x.png",
nil];
NSLog(@"Values before Sort: %@", array);
int iPos;
int iMin;
for (iPos = 0; iPos < [array count]; iPos++)
{
iMin = iPos;
for (int i = iPos+1; i < [array count]; i++)
{
if ([[self getSubStringForString:[array objectAtIndex:i]] intValue] >
[[self getSubStringForString:[array objectAtIndex:iMin]] intValue]) {
iMin = i;
}
}
if ( iMin != iPos )
{
NSString *tempValue = [array objectAtIndex:iPos];
[array replaceObjectAtIndex:iPos withObject:[array objectAtIndex:iMin]];
[array replaceObjectAtIndex:iMin withObject:tempValue];
}
}
NSLog(@"Sorted Values: %@", array);
我希望它至少能让你继续前进。 :)