【问题标题】:iOS compare intValue of NSString within an NSArrayiOS 比较 NSArray 中 NSString 的 intValue
【发布时间】:2012-01-09 15:17:47
【问题描述】:

我有一个 dico NSDictionary,其中包含以下内容: { 123 = , 125 = , ... 73 = }

123、125、..、73 是 NSString。

我想要一个 NSArray,其中包含按 id 排序的对象:

[ <MyObject:73>, <MyObject:123>, ..., <MyObject:125> ]

最有效的方法是什么?

我使用[[dico allKeys] sortedArrayUsingSelector:@selector(compare:)] 来键入有序键的列表,但由于键是 NSString,它们的排序方式不正确(我最终可能会得到 [42, 46, 5, 56. ...]。

【问题讨论】:

标签: ios nsarray


【解决方案1】:

在对代表数字的 NSString 进行排序时,您希望使用 NSNumericSearch 选项将它们像数字一样排序,例如1

    NSMutableDictionary* d = [NSMutableDictionary dictionaryWithCapacity:3];
    [d setObject:@"C" forKey:@"3"];
    [d setObject:@"A" forKey:@"1"];
    [d setObject:@"B" forKey:@"2"];

    NSArray* sortedKeys = [d keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [obj1 compare:obj2 options:NSNumericSearch];
    }];

    NSLog(@"%@",sortedKeys);

    NSArray* sortedObjs = [d objectsForKeys:sortedKeys notFoundMarker:[NSNull null]];
    NSLog(@"%@", sortedObjs);

【讨论】:

    【解决方案2】:

    您可以使用 NSDictionary 的 keysSortedWithCompartor 方法,您可以在其中提供一个比较器,以您希望的任何方式比较键(在您的情况下,通过将它们作为整数进行比较)。

    【讨论】:

    • 这个方法的确切签名是什么?我在苹果文档中没有找到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多