Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding most repeated object in array

I have an array full of strings with each string being a name. Some names may be the same while some may be different. The language I'm working in is objective-C. I want to be able to find out which name is most popular from this array (the array will be dynamic based on information given to the app from the user). I am not sure how to make this happen EFFICIENTLY. If someone could expand on this or provide an example, it would be appreciated.

Thank you

Example:

NSArray *nameArray= [[NSArray alloc] initWithObjects @"james", @"megan", @"lauren", @"mike" @james", nil]; 

  //james would be the most popular name
like image 255
Alex G Avatar asked Sep 01 '12 10:09

Alex G


1 Answers

Use NSCountedSet and then find the object with highest count using countForObject: method.

//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;
    }
}

Checking the result:

NSLog(@"Most frequent string: %@ with count: %i", mostOccurringObject,highestCount);

Credit goes to @Evan Mulawski answer

like image 133
Paresh Navadiya Avatar answered Sep 20 '22 10:09

Paresh Navadiya