用另一个带有id的nsarray对NSArray进行排序

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进行排序这可能吗?

Bri*_*kel 5

使用的问题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尝试添加时,它会崩溃nilarr3.如果arr1有一个不在arr2其中的值将被排除在外arr3.这些是您必须根据您的要求解决的风险.