【问题标题】:How to sort a NSArray with another NSArray?如何用另一个 NSArray 对 NSArray 进行排序?
【发布时间】:2015-07-03 10:54:54
【问题描述】:
NSArray A = @[[[@"id":@"3"]], [[@"id":@"4"]] ,[[@"id":@"c"]],[[@"id":@"f"]]];
NSArray idArray = @[@"c", @"3", @"4",@"f"];

只是我假设的一个例子。 如何使用 idArray 按其 id 对 A 进行排序?

也就是说,我希望 A 变成:

NSArray A= @[[[@"id":@"c"]], [[@"id":@"3"]] ,[[@"id":@"4"]],[[@"id":@"f"]]];

现在,我想请求一种算法来对数组 A 进行排序以获得所需的结果。

---我在谷歌搜索时得到答案:

NSArray *sorter = @[@"B", @"C", @"E"];
NSMutableArray *sortee = [@[
    @[@"B", @"abc"],
    @[@"E", @"pqr"],
    @[@"C", @"xyz"]
] mutableCopy];

[sortee sortUsingComparator:^(id o1, id o2) {
    NSString *s1 = [o1 objectAtIndex:0];
    NSString *s2 = [o2 objectAtIndex:0];
    NSInteger idx1 = [sorter indexOfObject:s1];
    NSInteger idx2 = [sorter indexOfObject:s2];
    return idx1 - idx2;
}];

【问题讨论】:

  • 你到底想要什么?
  • 我已经编辑了我的问题。愿你再次相见
  • 请检查 Xcode 中的 NSArray 格式是否错误。以及为什么你不为此使用简单的 NSDictionary
  • 这一切都没有意义。 “数组”应该是字典、深度数组封装、排序输出。请在提问时表现出一些努力。工作代码将是一个很好的起点。

标签: ios sorting nsarray


【解决方案1】:

如果你想比较两个数组,你可以使用

NSArray *array1=@[@"3",@"4",@"c","f"];
NSArray *array2=@[@"c",@"3",@"4","f"];

array1=[array1 sortedArrayUsingSelector:@selector(compare:)];
array2=[array2 sortedArrayUsingSelector:@selector(compare:)];

if ([array1 isEqualToArray:array2]) {
    NSLog(@"both are same");
}
else{
   NSLog(@"both are differnt");
}

或者如果你想从 2 个数组中获取公共元素,请使用

NSMutableSet* set1 = [NSMutableSet setWithArray:array1];
NSMutableSet* set2 = [NSMutableSet setWithArray:array2];
[set1 intersectSet:set2]; //this will give you only the obejcts that are in both sets

NSArray* result = [set1 allObjects];

【讨论】:

    【解决方案2】:

    这将是为 A 制作字典的更好方法。然后根据其特定值(如 IQ、姓名等)进行排序。

    NSArray A = @[[[@"id":@"3"]], [[@"id":@"4"]] ,[[@"id":@"c"]],[[@"id":@"f"]]];
    NSArray idArray = @[@"c", @"3", @"4",@"f"];
    
    NSMutableArray *array = [NSMutableArray array];
    for (int id = 0;idx<[A count];id++) {
    NSDictionary *dict = @{@"Name": A[id],@"IQ":idArray[id]};
    [array addObject:dict];
    }
    
    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"IQ" ascending:NO];
    [array sortUsingDescriptors:@[descriptor]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多