【问题标题】:NSSortDescriptor not sorting alphabeticallyNSSortDescriptor 不按字母顺序排序
【发布时间】:2016-04-01 10:10:59
【问题描述】:

我有一本字典,我想根据firstName 按字母顺序排序:

{
    id = 123;
    user =     {
        firstName = "Test 15";
        sex = Male;
    };
},
{
    id = 23;
    user =     {
        firstName = "Test 12";
        sex = Male;
    };
}

我尝试了以下代码进行排序:

NSSortDescriptor *sorter = [[NSSortDescriptor alloc]
                                         initWithKey:@"user.firstName"
                                         ascending:YES
                                         selector:@selector(localizedCaseInsensitiveCompare:)];

[arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]]

但上面的代码似乎不起作用。

您知道可能出了什么问题吗?

【问题讨论】:

    标签: ios nsarray nsdictionary nssortdescriptor alphabetical-sort


    【解决方案1】:

    sortedArrayUsingDescriptors:创建一个将被排序并返回的新数组。您不会将该数组存储在任何地方。原件未受影响,您的代码将排序后的数组丢弃。

    方法调用往往被命名,以便它们的名称表明它的作用。如果你想对一个数组进行排序(它需要是可变的,否则你不能对它进行排序),会有一些方法叫做 sortUsing... 类似“sortedArrayUsing...”的东西显然会返回一个新数组。您有一个数组,该方法为您提供了一个排序数组。

    【讨论】:

    • 愚蠢的错误。非常感谢。
    【解决方案2】:

    数组保持未排序,因为您没有将排序后的数组存储在任何地方。以下是您有的一些选择

    将排序后的数组保存到新数组中

    NSArary *sortedArray = [arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]];
    

    将排序后的数组保存到一个新的可变数组中

    NSMutableArary *sortedArray = [[arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]] mutableCopy];
    

    或者可能是您正在寻找的:将未排序的数组替换为已排序的数组

    arrayToBeSorted = [[arrayToBeSorted sortedArrayUsingDescriptors:[NSArray arrayWithObject:sorter]] mutableCopy];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 2023-01-26
      • 2012-11-08
      • 2011-01-30
      • 2019-04-05
      相关资源
      最近更新 更多