【问题标题】:Sorting an Array with Strings that contains Numbers [duplicate]使用包含数字的字符串对数组进行排序[重复]
【发布时间】:2012-11-12 23:11:19
【问题描述】:

可能重复:
Sorting NSString values as if NSInteger using NSSortDescriptor

我有一个数组,用我的 NSMutableDictionary.. 填充,我使用这个:

myArray =[[myDict allKeys]sortedArrayUsingSelector:@selector(IDONTKNOW:)];

myDicts 的 AllKeys 是 NSStrings...比如 123.423 或 423.343...我需要按递增数字对新的 myArray 进行排序...12.234 45.3343 522.533 5432.66 等

必须在@selector 中插入什么才能正确执行此操作?谢谢

【问题讨论】:

标签: objective-c xcode arrays


【解决方案1】:

您可以使用NSSortDescriptor 并传递doubleValue 作为密钥。

//sfloats would be your [myDict allKeys]
NSArray *sfloats = @[ @"192.5235", @"235.4362", @"3.235", @"500.235", @"219.72" ];
NSArray *myArray = [sfloats sortedArrayUsingDescriptors:
                    @[[NSSortDescriptor sortDescriptorWithKey:@"doubleValue" 
                                                    ascending:YES]]];

NSLog(@"Sorted: %@", myArray);

【讨论】:

    【解决方案2】:

    您不能直接使用sortedArrayUsingSelector:。使用sortedArrayUsingComparator: 并自己实现一个比较块。

    有点像这样的q/a:

    Changing the sort order of -[NSArray sortedArrayUsingComparator:]

    (事实上,该问题的代码可能会被复制/粘贴到您的代码中,一旦您将它从 integerValue 更改为 doubleValue 以进行四个转换字符串到数字调用,它就会“正常工作” ):

    NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
        double n1 = [obj1 doubleValue];
        double n2 = [obj2 doubleValue];
        if (n1 > n2) {
            return (NSComparisonResult)NSOrderedDescending;
        }
    
        if (n1 < n2) {
            return (NSComparisonResult)NSOrderedAscending;
        }
    
        return (NSComparisonResult)NSOrderedSame;
    }];
    

    【讨论】:

    • 很好的答案!拯救我的一天
    【解决方案3】:

    考虑sortedArrayUsingFunction:。这允许您定义在比较元素时使用的自定义比较函数。

    myArray =[[myDict allKeys]sortedArrayUsingFunction:SortAsNumbers context:self];   
    
    NSInteger SortAsNumbers(id id1, id id2, void *context)
    {
        float v1 = [id1 floatValue];
        float v2 = [id2 floatValue];
        if (v1 < v2) {
            return NSOrderedAscending;
        } else if (v1 > v2) {
            return NSOrderedDescending;
        }
        return NSOrderedSame;
    }
    

    更多信息在这里:Sort NSArray using sortedArrayUsingFunction

    【讨论】:

      猜你喜欢
      • 2014-08-11
      • 1970-01-01
      • 2020-02-18
      • 2021-11-19
      • 1970-01-01
      • 2019-05-26
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多