gpt4 book ai didi

ios - 将一个 NSArray 按另一个带有 id 的 nsarray 排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:43 28 4
gpt4 key购买 nike

我有 2 个 nsarray1 与 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com