-4

配列:(2007-99、2001-96、2005-93)
ソートされた出力は次のようになります:(2005-93、2001-96、2007-99)

私を助けてください。

4

4 に答える 4

2

このようなことを行うには、カスタム コンパレータを作成する必要があります。以下のメソッドでは、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);
于 2013-02-13T07:03:31.883 に答える
1

カスタム ブロックを使用してこれを並べ替えることができます (すべての数値が正しくフォーマットされていると想定していることに注意してください)。

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" )

于 2013-02-13T07:05:57.870 に答える
0

次のように配列をソートできます。

    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]];
            }
        }
    }
于 2013-02-13T07:13:07.883 に答える