我有一个键值对的数组(不需要调整大小)。键是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]
答案 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)];
}];