2024-04-11 12:12:13
-(void)test
{
//建立一个block,用来描述比较条件
NSComparator cp=^(NSString * obj1,NSString * obj2)
{
//首先,将字母a去掉
obj1=[obj1 substringFromIndex:1];
obj2=[obj2 substringFromIndex:1];
//然后,使用@“+”进行对字符串进行分割
NSArray * arr1=[obj1 componentsSeparatedByString:@"+"];
NSArray * arr2=[obj2 componentsSeparatedByString:@"+"];
//判断第一个数谁大
if ([arr1[0] integerValue]<[arr2[0] integerValue])
{
return NSOrderedAscending;
}
else if([arr1[0] integerValue]>[arr2[0] integerValue])
{
return NSOrderedDescending;
}
else//第一个数相同,就比较第二个数
{
//有可能数组里面只有一个元素,不可直接取第二个数
if (arr1.count==1)
{
if (arr2.count==1)
{
return NSOrderedSame;
}
else
{
return NSOrderedAscending;
}
}
else
{
if (arr2.count==1)
{
return NSOrderedDescending;
}
else
{
if([arr1[1] integerValue]>[arr2[1] integerValue])
{
return NSOrderedAscending;
}
else if([arr1[1] integerValue]>[arr2[1] integerValue])
{
return NSOrderedDescending;
}
else
{
return NSOrderedSame;
}
}
}
}
};
NSArray * arr=@[@"a123",@"a14", @"a17",@"a17+100",@"a19",@"a60",@"a83",@"a105+100",@"a109+120",@"a109+110",@"a109",@"a109+500"];
arr= [arr sortedArrayUsingComparator:cp];
for (NSString *obj in arr)
{
NSLog(@"%@",obj);
}
// 2014-02-21 17:15:38.652 SortArrayDemo[2867:70b] a14
// 2014-02-21 17:15:38.652 SortArrayDemo[2867:70b] a17
// 2014-02-21 17:15:38.652 SortArrayDemo[2867:70b] a17+100
// 2014-02-21 17:15:38.653 SortArrayDemo[2867:70b] a19
// 2014-02-21 17:15:38.653 SortArrayDemo[2867:70b] a60
// 2014-02-21 17:15:38.654 SortArrayDemo[2867:70b] a83
// 2014-02-21 17:15:38.654 SortArrayDemo[2867:70b] a105+100
// 2014-02-21 17:15:38.654 SortArrayDemo[2867:70b] a109
// 2014-02-21 17:15:38.655 SortArrayDemo[2867:70b] a109+120
// 2014-02-21 17:15:38.655 SortArrayDemo[2867:70b] a109+110
// 2014-02-21 17:15:38.656 SortArrayDemo[2867:70b] a109+500
// 2014-02-21 17:15:38.656 SortArrayDemo[2867:70b] a123
}
直接用正则表达式把所有数字匹配出来,再做比较应该是比较好的。
2024-04-11 08:43:08
2024-04-11 00:47:26
2024-04-11 01:19:27