我有一个键值对数组(不需要调整大小)。键是 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]
这两个数组旨在同步。所以你不应该使用两个数组。如果在某个时候你想删除一个怎么办?您也需要在第二个上将其删除。如果一个改变,另一个需要改变。这是在最后包含错误元素的好方法。
相反,创建一个自定义对象:
@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
对于“列表”中的第一个:
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)];
}];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句