私は、NSTableView
曲のタイトルでいっぱいのを持っています。
曲はアーティストごとに並べられているので、アーティスト名を行表示で表示できます。
コード
これまでは、テーブルデータを繰り返し処理し、アーティストを手動で配列に追加する必要がありました。
NSMutableArray *songsAndArtists = [NSMutableArray array];
Artist *artist;
for (Song *song in self.songs) {
if (artist != song.artist) {
artist = song.artist;
[songsAndArtists addObject:artist];
}
[songsAndArtists addObject:song];
}
1'000〜5'000の曲がある場合、これは非常に遅くなる可能性があります。
このプロセスをどのようにスピードアップできるか、私は本当に理解していません。
誰かが実行時にこれを計算する方法を知っていますか?
編集
私が何を意味するのかを明確にしようと思います:
NSTableView
グループ行をサポートします。テーブルビューには、CoreDataのすべての曲が表示されます。上で追加した印刷画面のように、グループ行を使用して曲のアーティストを表示したいと思います。
これを行うには、アーティスト、その曲、次のアーティストなどの配列を提供する必要があります。
上記のコードはアーティストを挿入する方法を示していますが、かなり時間のかかるプロセスです。
だから私の質問、どうすればこれをスピードアップできますか?
ヒント
nielsbotやFeloneousCatが提案したように、すべてのアーティストを繰り返すことは私にはうまくいきません。
ユーザーには、ライブラリを検索するオプションもあります。したがって、すべての曲が実際にリストに表示されるわけではありません。
解決
問題が何であったかをお知らせください。
NSString
問題は、以前のバージョンで実際に比較したことです。
かなり愚かな過ち...
約0.1秒以内で完了します。これはすばらしいことです。
tableData = [self addGroupRowsToArray:[self allSongs] withKeyPath:@"artist"];
- (NSArray *)addGroupRowsToArray:(NSArray *)array withKeyPath:(NSString *)keyPath {
NSMutableArray *mixedArray = [NSMutableArray array];
id groupRowItem;
for (id arrayItem in array) {
if (groupRowItem != [arrayItem valueForKeyPath:keyPath]) {
groupRowItem = [arrayItem valueForKeyPath:keyPath];
[mixedArray addObject:groupRowItem];
}
[mixedArray addObject:arrayItem];
}
return mixedArray;
}