2016-09-28 81 views
2

我在這裏的兩個不同的陣列排序第二陣列後陣列獲取索引對象的無重複

[ 
    "21:55", 
    "21:55", 
    "21:55", 
    "22:00", 
    "21:55" 
] 

我使用以上兩個數組分選這樣下面的代碼,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"HH:mm"]; 

     NSArray *sortedTimes = [timeArraySorting sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) 
     { 
      NSDate *date1 = [dateFormatter dateFromString:obj1]; 
      NSDate *date2 = [dateFormatter dateFromString:obj2]; 
      return [date1 compare:date2]; 
     }]; 
     NSLog(@"Start sortedTimes= %@",sortedTimes); 

像這樣,

sortedTimes = [ 
     "21:55", 
     "21:55", 
     "21:55", 
     "21:55", 
     "22:00" 
    ] 

但我需要比較第二個數組與第一個數組,以獲得第一個數組的索引。但在這裏我得到重複這樣的,

[ 
    0, 
    0, 
    0, 
    0, 
    3 
] 

,但我需要這樣,

[ 
    0, 
    1, 
    2, 
    4, 
    3 
] 

能否請你建議我怎樣才能解決這個問題? 謝謝。

+0

你如何創建和填充這第二個數組? –

+0

對排序後的第二個數組進行排序。 @phillip –

+0

**你是如何**,而不是在**時? –

回答

0

的一種方法是添加索引到原來的數組和排序這些呢,用字符串數據一起......

// data from the OP 
NSArray *timeArraySorting = @[ 
        @"21:55", 
        @"21:55", 
        @"21:55", 
        @"22:00", 
        @"21:55" 
        ]; 

// add index data to it, so it has the form: 
// @[ [ @"21:55", @0], [ @"21:55", @1], ... 
NSMutableArray *indexedTimeArray = [@[] mutableCopy]; 
for (int i=0; i<timeArraySorting.count; i++) { 
    [indexedTimeArray addObject: @[timeArraySorting[i], @(i)] ]; 
} 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"HH:mm"]; 

// sort that indexed data 
NSArray *sortedTimes = [indexedTimeArray sortedArrayUsingComparator:^NSComparisonResult(NSArray *obj1, NSArray *obj2) { 
    NSDate *date1 = [dateFormatter dateFromString:obj1[0]]; 
    NSDate *date2 = [dateFormatter dateFromString:obj2[0]]; 
    return [date1 compare:date2]; 
}]; 
NSLog(@"Start sortedTimes= %@",sortedTimes); 

輸出看起來是這樣的:

Start sortedTimes= (
    (
    "21:55", 
    0 
), 
    (
    "21:55", 
    1 
), 
    (
    "21:55", 
    2 
), 
    (
    "21:55", 
    4 
), 
    (
    "22:00", 
    3 
) 
) 

運行通過陣列皮卡排序結果和排序的指標...

NSMutableArray *result = [@[] mutableCopy]; 
NSMutableArray *indexes = [@[] mutableCopy]; 

for (NSArray *a in sortedTimes) { 
    [result addObject:a[0]]; 
    [indexes addObject:a[1]]; 
} 

NSLog(@"result is %@", result); 
NSLog(@"indexes is %@", indexes); 

測試相匹配的OP期望的結果。

+0

謝謝@danh,爲我的要求工作得很好 –