2010-04-19 66 views
0

我有一个数组,我从XML文件中加载大量数据。我在桌面视图上显示它,然后当你点击说一个作者时,它会显示他们所有的书。在NSMutable数组中分组数据

当时我的NSMutableArray有一个条目,每一本书的标题,作者等等。因此,在作者的表格中,它显示了作者姓名的次数,因为他们有书籍。我想对数组数据进行分组,以便表格只显示每个作者一次,但作者包含他的书籍数组。看起来很简单,但我找不到数组的方法。

回答

1

您可以遍历books数组并为作者创建一个新数组。对于每本书,使用containsObject检查作者是否已经在作者数组中。但是,当用户选择作者时,您还必须担心仅从书籍数组中显示作者的书籍。

将xml文件首先加载到NSMutableDictionary中可能更好,而不是键是作者名称,而每个键的对象是作者书的NSMutableArray。

然后,作者tableview将使用字典的键作为数据源(使用allKeys返回的数组,然后您可以根据需要进行排序或使用keysSortedByValueUsingSelector),而书籍tableview将使用选定键的书籍数组。

如果数据变得太大而无法一次加载到内存中,那么您将不得不使用其他选项,如SQLite。

+0

是的,谢谢他们认为他们可能是一个简单的功能,在特定的领域上分组数组。 我已经使用for循环遍历主数组,并填充每个组的子数组,但是当我将此添加到主数组时,它将子数组添加为对象,因此当我下次更改它时对主数组中的所有引用进行更改。有没有办法将子数组复制到主数组,所以这不会发生?谢谢 – padatronic 2010-04-21 10:52:03

+0

“main”数组的意思是“所有作者的书籍”和“sub”数组是否指“特定作者的书籍”?不知道为什么要将子阵列添加回主阵列,或者您“下次更改”的含义。如果您发布创建子数组的代码并将它们添加回主数组(将代码添加到您的问题中而不是作为注释),可能会有所帮助。我认为更简单和更直接的解决方案是使用NSMutableDictionary。这会自动按照作者为您分组书籍。 – DyingCactus 2010-04-21 12:49:16

+0

我已经通过创建一个对象数组并解决这个问题来解决这个问题,所以我可以使用每个对象的getter和setters来获得任何东西! – padatronic 2010-04-28 09:25:07