can*_*boy 27 iphone objective-c nsarray nsset ios
如果您有一个NSArray字符串
{ @"ONE", @"ONE", @"ONE", "TWO", @"THREE", @"THREE" }
Run Code Online (Sandbox Code Playgroud)
我怎么会把它变成
{ @"ONE", @"TWO", @"THREE" }
Run Code Online (Sandbox Code Playgroud)
..数组遵循与原始数据相同的顺序.我认为您可以将数组转换为NSSet以获取唯一的项目,但如果您将其转换回数组,则无法保证获得相同的顺序.
Dav*_*ong 49
我最初的想法是你可以这样做:
NSArray * a = [NSArray arrayWithObjects:@"ONE", @"ONE", @"ONE", @"TWO", @"THREE", @"THREE", nil];
NSLog(@"%@", [a valueForKeyPath:@"@distinctUnionOfObjects.self"]);
Run Code Online (Sandbox Code Playgroud)
但这并没有维持秩序.因此,您必须手动执行此操作:
NSArray * a = [NSArray arrayWithObjects:@"ONE", @"ONE", @"ONE", @"TWO", @"THREE", @"THREE", nil];
NSMutableArray * unique = [NSMutableArray array];
NSMutableSet * processed = [NSMutableSet set];
for (NSString * string in a) {
if ([processed containsObject:string] == NO) {
[unique addObject:string];
[processed addObject:string];
}
}
Run Code Online (Sandbox Code Playgroud)
我用的NSMutableSet确定,如果我之前已经碰到过这样的条目(而不是[unique containsObject:string],因为一组将有O(1)查找时间,以及阵列具有O(n)的查找时间.如果你只处理对象的数量少,那么这并不重要.但是,如果源数组是非常大的,然后使用一组确定的唯一性会增加一点速度提升的.(但是,你应该使用仪器来分析代码看看是否有必要)
San*_*gam 48
你可以这样做:
NSArray * uniqueArray = [[NSOrderedSet orderedSetWithArray:duplicatesArray] array];
Run Code Online (Sandbox Code Playgroud)
这样,您还可以保留订单!
我认为你可以做到这一点
NSArray * uniqueArray = [[Yourarray valueForKeyPath:@"@distinctUnionOfObjects.self"] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
Run Code Online (Sandbox Code Playgroud)
我希望这会对你有所帮助
| 归档时间: |
|
| 查看次数: |
19790 次 |
| 最近记录: |