And*_*obs 2 sorting objective-c nsarray ios
我有2个nsarrays 1与nsdictionary的另一个与nsnumbers
NSArray *arr1 = @[@{@"id":@1},@{@"id":@2},@{@"id":@3},@{@"id":@4}];
NSArray *arr2 = @[@3,@1,@4,@2];
Run Code Online (Sandbox Code Playgroud)
并且我想按照arr2的顺序通过他们的id对我的arr1进行排序这可能吗?
使用的问题sortedArrayUsingComparator:是你开始处理O(n^2)查找时间.对于第一个数组中的每个排序比较,您必须在第二个数组中进行查找.
最好的办法是利用哈希表来降低O(n)平均复杂度.
您的第一步是使用id键作为创建字典.结果看起来像@{@1: @{@"id":@"1"}, ...}.然后你只需要通过循环arr3并抓取值来构造一个数组.
NSArray *arr1 = @[@{@"id":@1},@{@"id":@2},@{@"id":@3},@{@"id":@4}];
NSArray *arr2 = @[@3,@1,@4,@2];
NSMutableDictionary *map = [NSMutableDictionary dictionary];
for (NSDictionary *item in arr1) {
map[item[@"id"]] = item;
}
NSMutableArray *arr3 = [NSMutableArray array];
for (id key in arr2) {
[arr3 addObject:map[key]];
}
Run Code Online (Sandbox Code Playgroud)
当然,该解决方案假设两个阵列之间存在奇偶校验 如果arr2有一个元素没有arr1尝试添加时,它会崩溃nil到arr3.如果arr1有一个不在arr2其中的值将被排除在外arr3.这些是您必须根据您的要求解决的风险.
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |