我在导航NSArray
时遇到了一些麻烦。
我的阵列:
Element[0] = "ElementA"
Element[1] = "ElementA"
Element[2] = "ElementA"
Element[3] = "ElementA"
Element[4] = "ElementB"
Element[5] = "ElementC"
Objective-C中是否有任何方法可以帮助我找到“中位数”元素?在这种情况下,“中位数”将是“ElementA”,或者是出现最大次数的值。
在C#中,这只是一次调用,但我找不到Objective-C中的等价物。
非常感谢, 布雷特
答案 0 :(得分:8)
我是这样做的:
NSArray * elements = ...; //your array of elements:
NSCountedSet * counts = [NSCountedSet setWithArray:elements]:
id modeObject = nil;
NSUInteger modeCount = 0;
for (id element in counts) {
if ([counts countForObject:element] > modeCount) {
modeCount = [counts countForObject:element];
modeObject = element;
}
}
NSLog(@"element with highest frequency: %@", modeObject);
NSCountedSet
是一个NSMutableSet
,它还会记住其元素添加到数组的次数。
答案 1 :(得分:3)
只为你写这个:)
- (NSString *) findModeString: (NSArray *) array {
NSMutableDictionary *stats = [[NSMutableDictionary alloc] init];
for(NSString *str in array) {
if(![stats objectForKey:str]) {
[stats setObject: [NSNumber numberWithInt:1] forKey:str];
} else {
[stats setObject: [NSNumber numberWithInt:[[stats objectForKey:str] intValue] + 1] forKey:str];
}
}
NSInteger maxOccurrences = 0;
NSString *max;
for(NSString *key in stats) {
if([[stats objectForKey:key] intValue] > maxOccurrences) {
max = key;
maxOccurrences = [[stats objectForKey:key] intValue];
}
}
[stats release];
return max;
}
编辑:虽然我的解决方案有效,但你应该赞成/接受@Dave DeLong的回答,这要好得多。
答案 2 :(得分:0)
你不能只使用:
[myarray length] /2