重複件数まで取得できる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
ちょっと便利な気がするー。