我有一个充满字符串的数组,每个字符串都是一个名字。有些名称可能相同,有些名称可能不同。我工作的语言是Objective-C。我希望能够从这个数组中找出最受欢迎的名称(该数组将根据用户提供给应用程序的信息而动态显示)。我不确定如何有效地实现这一目标。如果有人可以扩展或提供一个例子,我们将不胜感激。
谢谢
示例:
NSArray *nameArray= [[NSArray alloc] initWithObjects @"james", @"megan", @"lauren", @"mike" @james", nil];
//james would be the most popular name
答案 0 :(得分:11)
使用NSCountedSet
,然后使用countForObject:
方法查找计数最高的对象。
//create count set from array
NSCountedSet *setOfObjects = [[NSCountedSet alloc] initWithArray:yourArrayhere];
//Declaration of objects
NSString *mostOccurringObject = @"";
NSUInteger highestCount = 0;
//Iterate in set to find highest count for a object
for (NSString *strObject in setOfObjects)
{
NSUInteger tempCount = [setOfObjects countForObject:strObject];
if (tempCount > highest)
{
highestCount = tempCount;
mostOccurringObject = strObject;
}
}
检查结果:
NSLog(@"Most frequent string: %@ with count: %i", mostOccurringObject,highestCount);
信用转到@Evan Mulawski回复
答案 1 :(得分:5)
我会在你的情况下使用哈希表(NSMutableDictionary
),遍历字符串数组,使用每个字符串作为键,并将其值设置为它在数组中出现的数字。您可以使用变量(或多个名称具有相同出现次数的名称数组)跟踪最大值。
然后运行时间是线性的(O(n),其中n是数组中的名称数)。
答案 2 :(得分:0)
获取出现次数。
NSArray *nameArray= [[NSArray alloc] initWithObjects @"james", @"megan", @"lauren", @"mike" @james", nil];
NSCountedSet *set = [[NSCountedSet alloc] nameArray];