在objective-c中对键值对进行排序的最有效方法

时间:2018-04-19 15:21:22

标签: objective-c

我有一个键值对的数组(不需要调整大小)。键是64位uint,值可以是32位。

将这一对排序的最有效方法是什么?我在网上搜索过,但大多数文档只关心获取一个排序的键数组。如果方法只对键进行排序,然后逐个搜索相应的值,那么性能可能会令人不满意。

例如,来自NSDictionary的keysSortedByValue会给我一个使用它们的值排序的键数组,但我也需要这个排序值数组。

objective-c中是否有一个方法返回一个排序键和相应值的数组?

如果我输入的东西:

uint64  *keys_in;         // e.g., [8, 6, 7, 5, 3, 0, 9]
uint32  *values_in;       // e.g., [0, 1, 2, 3, 4, 5, 6]

只需一步即可完成以下任务:

keys_out            <-- [0, 3, 5, 6, 7, 8, 9]
values_out          <-- [5, 4, 3, 1, 2, 0, 6]

1 个答案:

答案 0 :(得分:0)

这两个数组是同步的。所以你不应该使用两个数组。 如果在某些时候你想删除一个怎么办?你也需要在第二个上删除它。如果一个人改变另一个人需要改变。这是在最后有错误元素的好方法。

而是创建一个自定义对象:

@interface CustomObject : NSObject
@property (nonatomic, assign) uint64 keyIn;
@property (nonatomic, assign) uint32 valueIn;
-(id)initWithKey:(uint64)key andValue:(uint32)value;
@end

@implementation CustomObject
-(id)initWithKey:(uint64)key andValue:(uint32)value
{

    if (self)
    {
        _keyIn = key;
        _valueIn = valueIn;
    }
    return self;
}
@end

对于&#34;列表中的第一个&#34;:

CustomObject *first = [[CustomObject alloc] initWithKey:8 andValue:0];

假设现在我们有NSArray CustomObjects

NSArray *sortedArray = [arrayUnsorted sortedArrayUsingComparator:^NSComparisonResult(CustomObject * _Nonnull obj1, CustomObject * _Nonnull obj2) {
        uint64 key1 = [obj1 keyIn];
        uint64 key2 = [obj2 keyIn];
        return [@(key1) compare:@(key2)];
    }];