【问题标题】:Sorting Array issue in iOS appiOS应用程序中的排序数组问题
【发布时间】:2013-04-16 06:23:42
【问题描述】:

我有一个类似的数组:

( "8461.86","8468.22","8468.22","8162.59","8164.50","7280.59")

我尝试按照以下顺序对该数组进行排序:

sortedArray = [arr_distance sortedArrayUsingComparator:^(id firstObject, id secondObject) {
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch];
}];

但我得到了如下数组:

( "7280.59","8162.59","8164.50","8461.86","8468.22","8468.22")

为什么会这样?

我也尝试过喜欢

return [firstObject compare:secondObject options:NSNumericSearch];

但没有得到正确的排序数组。

【问题讨论】:

  • 关于 Xcode 的问题在哪里?
  • 您提供的排序是升序排序。这是默认设置。

标签: ios arrays sorting


【解决方案1】:
NSSortDescriptor *desc = [[NSSortDescriptor alloc]initWithKey:@"" ascending:NO];
NSMutableArray *yourTempArray = [[NSMutableArray alloc]initWithObjects:@"8459.93",@"8466.28",@"8466.28",@"8160.70",@"8162.61",@"7278.56", nil];
[yourTempArray sortUsingDescriptors:[NSArray arrayWithObject:desc]];
NSLog(@"sotedAr == %@",yourTempArray);

输出:

sotedAr == (
"8466.28",
"8466.28",
"8459.93",
"8162.61",
"8160.70",
"7278.56"

)

【讨论】:

  • 感谢您的回复!但是我的值可以重复,即相同的值可以重复多次。
  • 那又怎样?它给你排序列表仪式?例如:5,6,7,8,5 那么输出为 8,7,6,5,5 rite ?
  • 感谢您的回复!但是当我给出这样的数组时: NSMutableArray *yourTempArray = [[NSMutableArray alloc]initWithObjects:@"8459.93",@"8466.28",@"8466.28",@"8160.70",@"8162.61",@"7278.56", nil] ; 排序不正确
  • 老兄不要复制和粘贴你的对象。查看输出,我得到了如上所示的输出
  • 对不起,我犯了一些错误,这就是为什么我没有得到正确的数组
【解决方案2】:

要按降序排序,您只需在代码中切换 firstObject 和 secondObject:

sortedArray = [arr_distance sortedArrayUsingComparator:^(id firstObject, id secondObject) {
  return [((NSString *)secondObject) compare:((NSString *)firstObject) options:NSNumericSearch];
}];

【讨论】:

    【解决方案3】:

    试试下面的代码:-

    NSSortDescriptor *frequencyDescriptor = [NSSortDescriptor sortDescriptorWithKey:@""
                                                                   ascending:NO
                                                                  comparator:^(id obj1, id obj2) {
                                                                      return [obj1 compare:obj2 options:NSNumericSearch];
                                                                  }];
    NSEnumerator * enumerator = [arr_distance objectEnumerator];
    NSArray * descriptors = [NSArray arrayWithObjects:frequencyDescriptor, nil];
    NSArray * sortedArray =   [arr_distance sortedArrayUsingDescriptors:descriptors];
    enumerator = [sortedArray objectEnumerator];
    NSLog(@"sortedArray = %@",sortedArray);
    

    // 使用已排序的 sortedArray

    【讨论】:

    • 感谢您的回复!但没有得到正确排序的数组。我有像这样的距离数组:("8459.93","8466.28","8466.28","8160.70","8162.61","7‌​278.56")
    • 对不起,你是对的。由于我的错误,我没有得到正确的数组。我喜欢放弃投票,但由于声誉低,我不能这样做。再次抱歉...
    【解决方案4】:

    以下代码可能有助于按降序对数组进行排序

    NSArray *arr = [NSArray arrayWithObjects:@"8459.93",@"8466.28",@"8466.28",@"8160.70",@"8162.61",@"7278.56", nil];
    NSMutableArray *yourTempArray = [[NSMutableArray alloc]init];
    [yourTempArray addObjectsFromArray:arr];
    NSLog(@"before sorting = %@",yourTempArray);
    NSSortDescriptor* sort = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: NO];
    
    [yourTempArray sortUsingDescriptors:[NSArray arrayWithObject:sort]];
    NSLog(@"After sorting = %@",yourTempArray);
    

    【讨论】:

    • 感谢您的回复!但我没有得到排序数组。
    • @user2243212,你试过那个代码吗,它肯定会按降序排列数组
    • @user2243212,只需将上面的代码复制并粘贴到你项目的viewdidload函数中,运行项目并查看输出
    • 对不起,你是对的。由于我的错误,我没有得到正确的数组。我喜欢放弃投票,但由于声誉低,我不能这样做。再次抱歉..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2011-09-27
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多