数组重复数据分组算法 Objective-C实现
JeannieWyma
8年前
<p>将进行分组: 3 ,3 ,5 ,4 ,4 ,9 ,9 ,9 ,8 ,99 ,88 ,99</p> <p>分组成: (3 3) (5) (4 4) (9 9 9) (8) (99 99) (88)</p> <pre> <code class="language-objectivec">@property (nonatomic, strong) NSMutableArray *resArray;</code></pre> <pre> <code class="language-objectivec">- (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; }</code></pre> <pre> <code class="language-objectivec">// 测试一下 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);</code></pre> <p style="text-align:center"><img src="https://simg.open-open.com/show/8dfc6aca16949d04470f754d6c402d71.png"></p> <p style="text-align:center">实现</p> <p>我是在什么场景下使用的?</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/628f81d736ee79d9b41be0c47bca328c.png"></p> <p style="text-align:center">如图</p> <p>比如我需要在地图上每隔一段时间插入一个大头针作为我的地理位置标记, 比如 15:15开始, 15:21结束 位置是同一个, 并没有发生变化, 那么我就显示一个时间段 15:15 - 15:21 如上图 那么就需要前面提到的小算法或者都不叫算法, 就叫它简单数据处理方法, 使用了递归.</p> <p>我封装成一个工具类</p> <pre> <code class="language-objectivec">/** * 对数据重复元素进行分组 * arrayList 数据源 * 返回值 装载的返回值 */ + (NSMutableArray *)getSameArrayList:(NSArray *)arrayList res:(NSMutableArray *)res;</code></pre> <pre> <code class="language-objectivec">+ (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; }</code></pre> <pre> <code class="language-objectivec">// 这样调用就可以了 NSMutableArray *temp = [NSMutableArray array]; temp = [DataBaseTool getSameArrayList:arrayData res:temp];</code></pre> <p>如果有需要你进行一下简单修改就可以使用了, 希望对有需要的同学有帮助, 这就是我分享的目的啦</p> <p> </p> <p> </p> <p>来自:http://www.jianshu.com/p/31836ff621c6</p> <p> </p>