hachinoBlog

hachinobuのエンジニアライフ

重複件数まで取得できるNSCountedSet

背景

例えばこんな問題があったとする。

インプットした文字列の単語の重複件数を求めなさい。

例) banana

答) b: 1 a: 3 n: 2

この問題を何か効率的に処理できる方法はないかと考えたときにNSCountedSetを見つけたので使い方をメモ。

使い方

NSCountedSetはNSMutableSetのサブクラスなので当然、格納した際に重複しているものは取り除かれるのだが、取り除く際に重複のcount数を保持している。

なので上記の問題に対応するコードをNSCountedSetを使用して書くとこうなる。

    NSString *text = @"banana";
    NSCountedSet *countSet = [NSCountedSet set];
    int total = [text length];
    for (int i = 0; i < total; i++) {
        [countSet addObject:[text substringWithRange:NSMakeRange(i, 1)]];
    }
    for (NSString *word in countSet) {
        NSLog(@"%@:%@", word, @([countSet countForObject:word]));
    }

出力結果

b:1
a:3
n:2

ちょっと便利な気がするー。