美文网首页学习准备
对数组中的元素去重复 (四种)

对数组中的元素去重复 (四种)

作者: 此页空白 | 来源:发表于2018-08-03 18:05 被阅读10次

NSArray*array=@[@"12-11",@"12-11",@"12-11",@"12-12",@"12-13",@"12-14"];

第一种方法:开辟新的内存空间,然后判断是否存在,若不存在则添加到数组中,得到最终结果的顺序不发生变化。效率分析:时间复杂度为O ( n2 ):

NSMutableArray*resultArray=[[NSMutableArrayalloc]initWithCapacity:array.count];

// 外层一个循环

for(NSString*iteminarray){

   // 调用-containsObject:本质也是要循环去判断,因此本质上是双层遍历

  // 时间复杂度为O ( n^2 )而不是O (n)

   if(![resultArraycontainsObject:item]){

   [resultArrayaddObject:item];

}

NSLog(@"resultArray: %@",resultArray);

2 原来集合操作可以通过valueForKeyPath来实现的,去重可以一行代码实现:

array=[arrayvalueForKeyPath:@"@distinctUnionOfObjects.self"];

NSLog(@"%@",array);

第二种方法:利用NSDictionary去重,字典在设置key-value时,若已存在则更新值,若不存在则插入值,然后获取allValues。若不要求有序,则可以采用此种方法。若要求有序,还得进行排序。效率分析:只需要一个循环就可以完成放入字典,若不要求有序,时间复杂度为O(n)。若要求排序,则效率与排序算法有关:

NSMutableDictionary*resultDict=[[NSMutableDictionaryalloc]initWithCapacity:array.count];

for(NSString*iteminarray){

[resultDictsetObject:itemforKey:item];

}

NSArray*resultArray=resultDict.allValues;

NSLog(@"%@",resultArray);

如果需要按照原来的升序排序,可以这样:

resultArray=[resultArraysortedArrayUsingComparator:^NSComparisonResult(id_Nonnullobj1,id_Nonnullobj2){

NSString*item1=obj1;

NSString*item2=obj2;

return[item1compare:item2options:NSLiteralSearch];

}];

NSLog(@"%@",resultArray);

第三种方法:利用集合NSSet的特性(确定性、无序性、互异性),放入集合就自动去重了。但是它与字典拥有同样的无序性,所得结果顺序不再与原来一样。如果不要求有序,使用此方法与字典的效率应该是差不多的。效率分析:时间复杂度为O (n):

 NSSet*set=[NSSetsetWithArray:array];

NSArray*resultArray=[setallObjects];

NSLog(@"%@",resultArray);

如果要求有序,那就得排序,比如这里要升序排序:

resultArray=[resultArraysortedArrayUsingComparator:^NSComparisonResult(id_Nonnullobj1,id_Nonnullobj2){

NSString*item1=obj1;

NSString*item2=obj2;

return[item1compare:item2options:NSLiteralSearch];

}];

NSLog(@"%@",resultArray);

直没有使用过有序集合,网友们反馈到可以直接使用有序集集合

NSOrderedSet*set=[NSOrderedSetorderedSetWithArray:array];

NSLog(@"%@",set.array);

相关文章

  • 2018-01-18

    数组去重 去除数组中重复的元素的原理:查看该元素在当前数组中是否存在,若存在,则跳过该元素,对其不做任何处理;若不...

  • 对数组中的元素去重复 (四种)

    NSArray*array=@[@"12-11",@"12-11",@"12-11",@"12-12",@"12-...

  • 数组中重复元素的处理

    1、取出数组中重复的元素(不重复的不提取,合并重复的元素) 2、合并重复的元素 (不重复的也提取) 3、剔除数组中...

  • js手写数组去重

    javascript数组中若存在重复元素,此时我们需要将重复的元素去除,下面我讲介绍一下几种方法进行数组元素去重 ...

  • iOS-Code Snippet

    找出数组中重复的元素

  • js数组去重查重

    数组去重 查找重复元素

  • 数组去重

    数组去重是将数组中重复的元素 一:Set对象 二:定义新数组,存放原来数组的一个元素,然后和剩下的比较,如果不同,...

  • 怎么用函数封装数组去重?

    数组去重, 意思就是把数组中重复的元素去掉 利用es5中的方法indexOf去重 indexOf()作用:判断某个...

  • JS 函数封装

    返回数组或对象的长度 返回数组中的非假值组成一个新数组 返回数组中任意一个元素 数组去重复

  • 26. Remove Duplicates from Sorte

    从数组中删除重复元素,返回无重复长度的数组,要使用in place算法,把返回的元素填入重复的位置即可

网友评论

    本文标题:对数组中的元素去重复 (四种)

    本文链接:https://www.haomeiwen.com/subject/ojsuvftx.html