我不知道我的解决方案是否是最好的方法,但它可以暂时解决您的问题:)。
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:@"[email protected]",@"[email protected]",
@"[email protected]", @"[email protected]",
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);
我希望它至少能让你继续。 :)
有关字母数字排序的正确答案,请参阅本G回答这里http://stackoverflow.com/questions/1351182/how-to-sort-a-nsarray-alphabetically – 2017-02-28 02:46:08