ios - obj-c怎么有没有数组uniq的操作
PHP中文网
PHP中文网 2017-04-17 11:14:51
[iOS讨论组]

我有这样一个数组

NSArray *a = [NSArray arrayWithObjects:@"a", @"b", @"c", @"a", @"b", @"d", nil];

首先需要去掉重复的,活的这样的

NSArray *a = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", nil];

我现在做的就是用遍历生成的,有没有什么办法可以高效完成的。
另外的需求就是要生成这样的数组

NSArray *a = [NSArray arrayWithObjects:
    [NSDictionary arrayWithObjectsAndKeys:@"2", @"a", nil],
    [NSDictionary arrayWithObjectsAndKeys:@"2", @"b", nil],
    [NSDictionary arrayWithObjectsAndKeys:@"1", @"c", nil],
    [NSDictionary arrayWithObjectsAndKeys:@"1", @"d", nil],
    nil];

键是唯一值,值是数量

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
天蓬老师

如果结果的顺序无所谓,可以用Key Value Coding:

NSArray *result = [a valueForKeypath:@"@distinctUnionOfObjects.self"];

如果希望能保持原来的顺序,在iOS 5.0或OS X 10.7以上版本,可以用:

NSArray *orderedResult = [[NSOrderedSet orderedSetWithArray:a] array]

但这只是开发高效,运行效率不一定比自己实现的快。

PHPz

可以用NSSet去重

巴扎黑

自己实现吧,也不算复杂。去重主要有两种算法:

1. 元素个数不多(小于1M个都可以算),先排序(O(NlogN)复杂度),然后顺序遍历一次即可去重

2. 元素个数相当多(多余1M),哈希去重,然后收集起来。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号