2009-12-13 67 views
0

我有一个iPhone应用程序需要排序几个NSMutableArrays,这个数组包含大约3000个元素。排序NSMutableArray的最佳方法?

想法是在应用程序启动时将它们排序一次,然后每次迭代我需要将9个元素插入到每个数组中。有没有一种有效的方式与NSMutableArrays,以排序的方式插入这9个元素?

我不知道sortUsingSelector:是否“智能”足以利用数组的大部分排序,而只有9个元素是“未排序”的。

谢谢!

+0

看看http://stackoverflow.com/questions/1844031/how-to-sort-nsmutablearray-using-sortedarrayusingdescriptors/1845165#1845165 – stefanB 2010-02-27 23:16:49

回答

2

排序NSMutableArray的最佳方法?使用sortUsingSelector消息。它应该是足够聪明

要以排序的方式插入元素您可以先对数组执行二分搜索,然后将元素插入到所需的位置。

回答了您的问题后,我建议您考虑使用SQLite来存储阵列所需的元素。这样,你的问题将减少到查询与条款子句,并插入新的9个元素与插入句子的元素的表。如果您在寻找的订单上有索引,它应该很快。

+1

-1这是不够聪明。文档在'sortedArrayUsingFunction:context:hint:'的描述中暗示了这一点。 – 2010-10-04 03:43:52

4

我已经成功地将元素扔进数组,然后用NSArray sorting methods对它进行排序。

听起来效率不高,但这些Foundation类不仅仅是标准C数组的轻量级包装。相反,他们拥有大量的代码,这些代码都是为了使这些标准任务变得简单快捷。

一个很好的经验法则是使用内置类提供的最快最简单的方法,然后只有在证明简单方法不够快时才调查不同的方法。

不成熟的优化是一切邪恶的根源。

1

我正在寻找一些比较不同种类的实际测量值,但没有找到任何。所以我自己测量了一个我正在使用的实际数据集。以下是我的数据YMMV的结果。时间在几秒钟内。

2011-12-26 14:09:36.264 sorting 302 objects 
2011-12-26 14:09:36.335 sorted w/descriptors in 0.051 
2011-12-26 14:09:36.361 sorted w/selector in 0.004 
2011-12-26 14:09:36.394 sorted w/function in 0.010 
2011-12-26 14:09:36.427 sorted w/comparator in 0.011