Okeh。这是交易: 有一个NSMutualDictionary,单词作为键(比如名字)。值对象是NSNumber(如评级)
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:[NSNumber intValue:1] forKey:@"Melvin"];
[dictionary setObject:[NSNumber intValue:2] forKey:@"John"];
[dictionary setObject:[NSNumber intValue:3] forKey:@"Esben"];
我想先按最高等级对它们进行排序。
我知道我会这样做:
[searchWords keysSortedByValueUsingSelector:@selector(intCompare:)];
但不确定如何实现intCompare。 (比较方法)
有人能指出我正确的方向吗?
- (NSComparisonResult) intCompare:(NSString *) other
{
//What to do here?
}
我想和{Esben,John,Melvin}一起获得NSArray。
答案 0 :(得分:1)
These constants are used to indicate how items in a request are ordered.
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
这取自Apple关于数据类型的开发文档...现在您要做的就是检查哪一个更大。所有这一切都是为你完成的。只需传入@selector(比较:)即可。由于您的值是NSNumbers,NSNumber实现了compare:函数。这是你想要的:)
答案 1 :(得分:1)
NSArray *sortedArray = [searchWords sortedArrayUsingSelector:@selector(compare:) ];
或者你可能会使用,这里是你的intCompare选择器的实现
- (NSComparisonResult) intCompare:(NSString *) other
{
int myValue = [self intValue];
int otherValue = [other intValue];
if (myValue == otherValue) return NSOrderedSame;
return (myValue < otherValue ? NSOrderedAscending : NSOrderedDescending);
}
答案 2 :(得分:1)
由于您放入字典的对象是NSNumber
个实例,因此您应该稍微更改方法签名。但是完整的实现非常简单:
-(NSComparisonResult)intCompare:(NSNumber*)otherNumber {
return [self compare:otherNumber];
}
事实上,当您可以使用intCompare:
compare:
已经拥有的NSNumber
时,我认为您没有必要使用自己的{{1}}方法。