我有 2 个 nsarray 1 与 nsdictionary 的另一个与 nsnumbers
NSArray *arr1 = @[@{@"id":@1},@{@"id":@2},@{@"id":@3},@{@"id":@4}];
NSArray *arr2 = @[@3,@1,@4,@2];
我想按照 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]];
}
这个解决方案当然假设两个数组之间存在奇偶校验。如果 arr2
有一个元素不在 arr1
中,它会在尝试将 nil
添加到 arr3
时崩溃。如果 arr1
的值不在 arr2
中,它将被排除在 arr3
之外。这些是您必须根据您的要求解决的风险。
关于ios - 将一个 NSArray 按另一个带有 id 的 nsarray 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19012301/