Mat*_*lly 15 union set-theory objective-c nsarray
我有两个共享一些共同元素的NSArrays A和B,例如
A: 1,2,3,4,5
B: 4,5,6,7
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的NSArray,它包含两个NSArrays之间共同的内容,它们与第二个NSArray的内容相连,同时保持元素的顺序并删除重复项.也就是说,我想(A∩B)∪B.
以前的NSArrays上的操作将产生:
A ? B: 4,5
(A ? B) ? B: 4,5,6,7
Run Code Online (Sandbox Code Playgroud)
我如何在Objective-C中实现这一目标?
zap*_*aph 22
将NSArrays 转换为NSSets,标准集操作可用.
NSArray *a = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
NSArray *b = [NSArray arrayWithObjects:@"4", @"5", @"6", @"7", nil];
NSMutableSet *setA = [NSMutableSet setWithArray:a];
NSSet *setB = [NSSet setWithArray:b];
[setA intersectSet:setB];
NSLog(@"c: %@", [setA allObjects]);
Run Code Online (Sandbox Code Playgroud)
NSLog输出:c:(4,5)
[setA unionSet:setB];
NSLog(@"d: %@", [setA allObjects]);
Run Code Online (Sandbox Code Playgroud)
NSLog输出:d:(6,4,7,5)
Dav*_*ong 15
正如其他人所建议的那样,你可以轻松地做到这一点NSSet.但是,这不会保留订购.
如果你想保留排序并且你可以定位OS X 10.7+,那么你可以使用new NSOrderedSet(和可变子类)来做同样的事情.
正如其他人所指出的那样,使用NSSet.对于
NSArray * a = [NSArray arrayWithObjects: ... ];
NSArray * b = [NSArray arratWithObjects: ... ];
NSMutableSet * set = [NSMutableSet setWithArray:a];
[set intersectSet:[NSSet setWithArray:b];
[set unionSet:[NSSet setWithArray:b];
Run Code Online (Sandbox Code Playgroud)
这会照顾欺骗,但不会保留秩序.您将结果置于"set"中并将它们排序回一个数组.没有本地收集功能可以完成所有工作 - 如果您希望保持订单并分别担心欺骗,请使用NSMutableArray的-removeObjectsInArray:方法等.
| 归档时间: |
|
| 查看次数: |
13129 次 |
| 最近记录: |