數組重復數據分組算法 Objective-C實現

JeannieWyma 8年前發布 | 12K 次閱讀 算法 iOS開發 移動開發 Objective-C

將進行分組: 3 ,3 ,5 ,4 ,4 ,9 ,9 ,9 ,8 ,99 ,88 ,99

分組成: (3 3) (5) (4 4) (9 9 9) (8) (99 99) (88)

@property (nonatomic, strong) NSMutableArray *resArray;
- (NSMutableArray *)getSameArrayList:(NSArray *)arrayList
{
    NSMutableArray *diffArray = [NSMutableArray array];
    NSMutableArray *sameArray = [NSMutableArray array];
    [sameArray addObject:arrayList[0]];
    for (int i = 1; i < arrayList.count; i ++) {
        if ([arrayList[i] isEqualToString:sameArray[0]]) {
            [sameArray addObject:arrayList[i]];
        }else{
            [diffArray addObject:arrayList[i]];
        }
    }
    [_resArray addObject:sameArray];
    if (diffArray.count != 0) {
        [self getSameArrayList:diffArray];
    }
    return _resArray;
}
// 測試一下
    NSArray *arrayList = @[@"3", @"3",@"5", @"4", @"4", @"9", @"9", @"9", @"8", @"99", @"88", @"99"];
    self.resArray = [NSMutableArray array];
    [self getSameArrayList:arrayList];
    NSMutableArray *r = [NSMutableArray array];
    for (int i = 0; i < _resArray.count; i ++) {
        [r addObject:_resArray[i]];
    }
    NSLog(@"%@", r);

實現

我是在什么場景下使用的?

如圖

比如我需要在地圖上每隔一段時間插入一個大頭針作為我的地理位置標記, 比如 15:15開始, 15:21結束 位置是同一個, 并沒有發生變化, 那么我就顯示一個時間段 15:15 - 15:21 如上圖 那么就需要前面提到的小算法或者都不叫算法, 就叫它簡單數據處理方法, 使用了遞歸.

我封裝成一個工具類

/**
 *  對數據重復元素進行分組
 *  arrayList 數據源
 *  返回值     裝載的返回值
 */
+ (NSMutableArray *)getSameArrayList:(NSArray *)arrayList res:(NSMutableArray *)res;
+ (NSMutableArray *)getSameArrayList:(NSArray *)arrayList res:(NSMutableArray *)res
{
    NSMutableArray *diffArray = [NSMutableArray array];
    NSMutableArray *sameArray = [NSMutableArray array];
    [sameArray addObject:arrayList[0]];
    for (int i = 1; i < arrayList.count; i ++) {
        UserModel *model = arrayList[i];
        UserModel *sameModel = sameArray[0];
        // 這里我根據經緯度進行判斷
        if ([model.latitude isEqualToString:sameModel.latitude] && [model.longitude isEqualToString:sameModel.longitude]) {
            [sameArray addObject:arrayList[i]];
        }else{
            [diffArray addObject:arrayList[i]];
        }
    }
    [res addObject:sameArray];
    if (diffArray.count != 0) {
        [DataBaseTool getSameArrayList:diffArray res:res];
    }
    return res;
}
// 這樣調用就可以了
NSMutableArray *temp = [NSMutableArray array];
temp = [DataBaseTool getSameArrayList:arrayData res:temp];

如果有需要你進行一下簡單修改就可以使用了, 希望對有需要的同學有幫助, 這就是我分享的目的啦

 

 

來自:http://www.jianshu.com/p/31836ff621c6

 

 本文由用戶 JeannieWyma 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!