关闭

【iOS开发】数组的去重(无序和有序)

1648人阅读 评论(0) 收藏 举报
分类:

一、 无序的去重

1.利用NSDictionary的AllKeys(AllValues)方法
可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的。
代码:
    NSArray *arr =@[@11,@22,@11];
    NSMutableDictionary *dict = [NSMutableDictionarydictionary];
    for (NSNumber *numberin arr) 
    {
        [dict setObject:numberforKey:number];
    }
    NSLog(@"%@",[dictallValues]);
输出结果为:
2016-03-09 17:52:46.421 test[9555:408408] (
    22,
    11
)
2.利用NSSet的AllObjects方法
这种方法更快,利用NSSet不会添加重复元素的特性。不过去重的数组没有进行排序,如果需要排序,可以使用NSSortDescriptor类。
代码:
    NSArray *arr =@[@111,@222,@111];
    NSSet *set = [NSSetsetWithArray:arr];
    NSLog(@"%@",[setallObjects]);
输出结果为:
2016-03-09 17:55:13.081 test[9577:411377] (
    111,
    222
)

二、 有序的去重

很多时候可能会遇到需要去除NSArray重复的元素,用了很多方法。
最方便快捷的是NSSet.但是NSSet去重后有时候数组元素的顺序会打乱。于是换了另外一种方法如下:
代码:
    NSArray *classArray =@[@1,@2,@1,@3,@3,@1];

    NSMutableArray *categoryArray = [[NSMutableArray alloc] init];

    for (unsigned i =0; i < [classArray count]; i++)
    {

        if ([categoryArray containsObject:[classArray objectAtIndex:i]] == NO)
        {

            [categoryArray addObject:[classArray objectAtIndex:i]];

        }

    }
    NSLog(@"---%@",categoryArray);
输出结果为:
2016-03-09 17:59:12.554 test[9598:414513] ---(
    1,
    2,
    3
)
顺序为有序的.
0
0
查看评论

算法练习:两指针之有序数组去重

问题描述 给出一个有序数组,就地移除重复元素,保持每个元素只出现一次,并返回新数组的长度。   问题分析 这个比较简单,直接使用两个指针,一个在前,一个在后,扫描一遍数组即可。时间复杂度为O(n^2)。 比如数组A = { 1,1, 2, ...
  • s634772208
  • s634772208
  • 2015-07-02 17:52
  • 1009

iOS 数组的去重(普通的无序的去重和排序好的去重)

有时需要将NSArray中去除重复的元素,而存在NSArray中的元素不一定都是NSString类型。今天想了想,加上朋友的帮助,想到两种解决办法,先分述如下。 1.利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用...
  • zhaopenghhhhhh
  • zhaopenghhhhhh
  • 2014-05-04 12:32
  • 28888

两个有序数组,去重并按顺序显示

直接上代码。这里最后一次比较会有数组越界,幸运的是php并不会报错。<?php $arr1 = [1,3,4,6,9,11,12,18,20]; $arr2 = [2,3,4,5,8,12,13,14,19,20];$length = count($arr1) + count($arr2); ...
  • donglynn
  • donglynn
  • 2017-03-28 11:42
  • 358

ios数组基本用法和排序

1.创建数组 // 创建一个空的数组 NSArray *array = [NSArray array]; // 创建有1个元素的数组 array = [NSArray arrayWithObject:@"123"]; // 创建有多个元素的数组 array ...
  • daiyelang
  • daiyelang
  • 2014-01-24 09:00
  • 69121

iOS使用分类(category)实现有序字典

iOS使用分类(category)实现有序字典什么是分类OC中为了对类的方法进行扩展,添加了分类的概念。分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法。关于字典OC中字典是无序的,如果想创建有序字典,可以在字典中添加一个有序数组,数组中保存有顺序的key值,按照数...
  • Nick_since2016
  • Nick_since2016
  • 2017-03-02 10:27
  • 1762

【iOS开发】数组的去重(无序和有序)

一、 无序的去重1.利用NSDictionary的AllKeys(AllValues)方法可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的。代码: NSArray *arr =@[@11,@22,@11]; ...
  • Hanrovey
  • Hanrovey
  • 2016-05-30 15:18
  • 1648

C Tricks(七)—— 有序向量的去重

有序向量的去重,仅需借助指定位置的删除 remove(r) 这一辅助函数即可:int uniquify(int A[]){ int oldSize = size; int i = 1; while (i < size){ A[i-1] == A[i] ...
  • lanchunhui
  • lanchunhui
  • 2016-05-27 12:27
  • 483

算法:有序链表的去重

LeetCode OJ Problem  :Remove Duplicates from Sorted List
  • zaizai09
  • zaizai09
  • 2014-04-11 21:39
  • 1426

将两个无序数组合并为有序链表

实现思想:把两个无序的数组首先排序,然后再按照链表结构把它们分别构造好,然后再把两个有序链表合并。int const array1_size = 5;//数组1的长度int const array2_size = 7;//数组2的长度//链表结构体typedef struct ListNode{&#...
  • heyjimmy
  • heyjimmy
  • 2006-10-19 10:44
  • 5121

混合两个有序int数组到另一个有序数组并去重

题目:两个有序数组a和b,混合之,放在另一个数组c中,使得c也是有序数组(升序),去除重复的项。 虽然觉得不是很简便,但代码如下: int merge_array (int *a , int *b, int *c, int n1, int n2) { if (n1 < 0 || n2 ...
  • ioszhuang2015
  • ioszhuang2015
  • 2015-05-06 01:05
  • 734
    个人资料
    • 访问:285302次
    • 积分:4270
    • 等级:
    • 排名:第8452名
    • 原创:149篇
    • 转载:52篇
    • 译文:2篇
    • 评论:62条
    博客友情链接