【问题标题】:Attempting to sort by lastname from a name object尝试从名称对象中按姓氏排序
【发布时间】:2015-03-03 05:17:22
【问题描述】:

我有以下块:

sortedNameArray = [nameArray  sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];

我用来获取字符串数组并按字母顺序排列它们。现在我想要做的是通过查看姓氏属性然后按其lastName属性对对象进行字母顺序排列,使其按字母顺序排列名称对象数组(具有NSString firstName 和NSString lastName 的对象)。下面是一个 Name 对象的例子:

  Name *bobSmith = [[Name alloc] init];
[bobSmith setFirstName:@"Bob"];
[bobSmith setLastName:@"Smith"]; // this is what I want to alphabetize it by

我试过了:

  for (int i = 0; i < [nameArray count]; i++){
sortedNameArray = [[nameArray[i] getLastName]  sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){
    return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
}

但这显然行不通。如何通过查看其中一个字符串属性来获取此方法以按字母顺序排列对象数组....即获取 Name 对象数组,查看它们的姓氏(NSString)并根据此按字母顺序排列对象?

【问题讨论】:

    标签: ios objective-c xcode nsmutablearray objective-c-blocks


    【解决方案1】:
    sortedNameArray = [nameArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [[obj1 lastName] compare:[obj2 lastName]];
    }];
    

    【讨论】:

      【解决方案2】:

      您可以使用 sortDescriptors 将 Name 对象数组按字母顺序排列

      NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastname" ascending:YES];
      
      NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
      
      NSArray *sortedArray = [nameArray sortedArrayUsingDescriptors:sortDescriptors];
      
      nameArray =[NSMutableArray arrayWithArray:sortedArray];
      

      我从排序描述符编程主题中提取了代码。此外,Key-Value Coding 也发挥了作用,sortedArrayUsingDescriptors: 将向 myArray 中的每个元素发送 valueForKey:,然后使用标准比较器对返回的值进行排序。

      【讨论】:

        猜你喜欢
        • 2019-05-06
        • 2022-01-14
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        相关资源
        最近更新 更多