配列:(2007-99、2001-96、2005-93)
ソートされた出力は次のようになります:(2005-93、2001-96、2007-99)
私を助けてください。
配列:(2007-99、2001-96、2005-93)
ソートされた出力は次のようになります:(2005-93、2001-96、2007-99)
私を助けてください。
このようなことを行うには、カスタム コンパレータを作成する必要があります。以下のメソッドでは、rangeOfString を使用してダッシュの位置を取得し、文字列の 1 位置から始まる部分文字列を取得し、それを int に変換して比較を行います。
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:@"2007-07",@"2005-01",@"2004-09",@"2003-02", nil];
NSArray *sortedArray = [arr sortedArrayUsingComparator: ^(NSString *s1, NSString *s2) {
if ([[s1 substringFromIndex:[s1 rangeOfString:@"-"].location + 1] intValue] > [[s2 substringFromIndex:[s2 rangeOfString:@"-"].location + 1] intValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([[s1 substringFromIndex:[s1 rangeOfString:@"-"].location + 1] intValue] < [[s2 substringFromIndex:[s2 rangeOfString:@"-"].location + 1] intValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
NSLog(@"%@",sortedArray);
カスタム ブロックを使用してこれを並べ替えることができます (すべての数値が正しくフォーマットされていると想定していることに注意してください)。
NSArray *rollNumbers = [NSArray arrayWithObjects:@"2007-99", @"2001-96", @"2005-93", nil];
NSArray *sortedRollNumbers = [rollNumbers sortedArrayUsingComparator:^NSComparisonResult(NSString *roll1, NSString *roll2) {
NSArray *roll1Components = [roll1 componentsSeparatedByString:@"-"];
NSArray *roll2Components = [roll2 componentsSeparatedByString:@"-"];
NSNumber *roll1Number = [NSNumber numberWithInt:[[roll1Components objectAtIndex:1] intValue]];
NSNumber *roll2Number = [NSNumber numberWithInt:[[roll2Components objectAtIndex:1] intValue]];
return [roll1Number compare:roll2Number];
}];
NSLog(@"%@", sortedRollNumbers);
出力:
( "2005-93", "2001-96", "2007-99" )
次のように配列をソートできます。
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:@"2007-07",@"2005-01",@"2004-09",@"2003-02", nil];
NSMutableArray *marks = [[NSMutableArray alloc]init];
for (int i = 0; i < arr.count; i++)
{
NSArray *sep = [[arr objectAtIndex:i] componentsSeparatedByString:@"-"];
[marks addObject:[sep objectAtIndex:1]];
}
NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"" ascending:NO];
[marks sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
NSMutableArray *sortedFinalArray = [[NSMutableArray alloc]init];
for (int i = 0; i < marks.count; i++)
{
for (int k = 0; k < arr.count; k++)
{
NSRange aRange = [[arr objectAtIndex:i] rangeOfString:[marks objectAtIndex:k]];
if (!(aRange.location == NSNotFound))
{
[sortedFinalArray addObject:[arr objectAtIndex:k]];
}
}
}