1

Python にはコレクション ライブラリがあります。私の Web アプリケーションでは、最も一般的なアイテムcollections.Counter(aList).most_common([n])を返すために使用しています。naList

素晴らしく、簡潔で、適度に高速です。

今、私は iOS アプリケーションに取り組んでいます。Objective-C または Cocoa フレームワークで、文字列の配列に対して同じ機能を提供できるものはありますか?

aListは のNSArraryであると仮定しNSStringsます。

NSMutableDictionary *aCounter = [NSMutableDictionary dictionaryWithCapacity:[aList count]];
for aString in aList {
    NSUInteger keyCount = [aCounter valueForKey:aString];
    if keyCount == nil {
        [aCounter setValue:1 forKey:aString];
    }
    else {
        [aCounter setValue:(keyCount+1) forKey:aString];
    }

これを凝縮するか、パフォーマンスを向上させるための提案はありますか?

4

1 に答える 1

0

私の電話では、これで途中まで行くことができます:

NSArray *input = ...
NSCountedSet *set = [[NSCountedSet alloc] initWithArray:input];
NSMutableDictionary *output = [[NSMutableDictionary alloc] init];
for (id elem in set) [output setObject:[set countForObject:elem] forValue:elem];

これで十分な速度が得られない場合は、挿入時の最適化を検討します。

于 2013-03-17T19:00:27.473 に答える