5

文字列でいっぱいの配列があり、各文字列は名前です。同じ名前もあれば、異なる名前もあります。私が働いている言語はObjective-Cです。この配列から最も人気のある名前を見つけたいと思います(配列は、ユーザーからアプリに提供された情報に基づいて動的になります)。これを効率的に実現する方法がわかりません。誰かがこれを拡張したり、例を提供したりすることができれば、それはありがたいです。

ありがとうございました

例:

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

  //james would be the most popular name
4

3 に答える 3

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);

クレジット@EvanMulawskiの回答に送られます

于 2012-09-01T10:32:54.243 に答える
5

私はハッシュテーブル(NSMutableDictionaryあなたの場合)を使用し、文字列の配列を調べ、各文字列をキーとして使用し、その値を配列内で出現する数として設定します。変数(または、同じ出現回数の名前が複数ある場合は名前の配列)を使用して、最大値を追跡できます。

その場合、実行時間は線形になります(O(n)、ここでnは配列内の名前の数です)。

于 2012-09-01T10:37:51.213 に答える
0

発生数を取得します。

NSArray *nameArray= [[NSArray alloc] initWithObjects @"james", @"megan", @"lauren", @"mike" @james", nil]; 
NSCountedSet *set = [[NSCountedSet alloc] nameArray];
于 2017-02-28T14:23:45.443 に答える