2016-09-28 80 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,为我的要求工作得很好 –