gpt4 book ai didi

objective-c - 在 NSTableView 运行时计算组行

转载 作者:行者123 更新时间:2023-12-03 16:24:18 25 4
gpt4 key购买 nike

我有一个 NSTableView,其中充满了歌曲标题。

歌曲按艺术家排序,因此我可以将艺术家姓名显示为行 View 。

enter image description here

<小时/>

代码

到目前为止,我必须遍历表数据并手动将艺术家添加到数组中。

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 支持分组行。我的表格 View 显示了 CoreData 中的所有歌曲。我想使用组行来显示歌曲的艺术家,就像我在上面添加的打印屏幕中一样。

为此,我必须提供一个包含艺术家的数组,后跟其歌曲,然后是下一位艺术家,依此类推。

上面的代码展示了如何插入艺术家,但这是一个非常耗时的过程。

所以我的问题是,如何加快速度?

<小时/>

提示

喜欢nielsbotFeloneous Cat建议,遍历所有艺术家对我来说不起作用。

用户还可以选择在库中进行搜索。因此,并非所有歌曲实际上都应该出现在列表中。

<小时/>

解决方案

我只是想让你知道问题是什么:

问题是,我实际上是通过以前的版本中的 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;
}

最佳答案

嗯,我已经尝试重现您的问题。我不知道你从哪里获取数据,所以我伪造了它们只是为了性能测试。我还在 iPod 4gen 上测试了代码,它运行时没有任何延迟。 (尝试了 50000 行,它只在启动时挂起,然后完美运行)

总的来说,我的方法在数据结构方面与你的不同。所以你用数组,我用字典。不过我认为如果我使用数组应该不会有任何问题。也许我问错了?

不过,我的方法似乎更适合搜索工作(抱歉,我太费心去尝试实现它了)。事实上,现在要进行搜索,整个部分可能会被排除而不检查歌曲,除非您当然需要搜索歌曲,无论如何这提供了更大的灵 active 。

好的,这是一个链接:https://github.com/igorpakushin/BigList

很高兴收到一些反馈,谢谢

问候,伊戈尔

关于objective-c - 在 NSTableView 运行时计算组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14127368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com