【发布时间】:2013-09-08 00:41:38
【问题描述】:
我有一个 Objective-C 应用程序,我试图在对具有相同排序值的数组元素进行分组的同时对 NSArray 进行排序。理想情况下,我会生成一个新的集合数组,其中新数组中的每个集合都包含一个或多个原始数组元素,并且每个集合中的所有元素都具有相同的排序值。它的工作方式类似于Ruby "chunk" method
举个例子,假设我有一个 NSArray,其中包含排序值等于以下内容的项:
[1, 3, 5, 7, 9, 8, 5, 3, 2, 4, 3, 6]
我希望新数组包含 9 个集合,其排序值如下所示:
[ (1), (2), (3, 3, 3), (4), (5, 5), (6), (7), (8), (9) ]
在 Ruby 中,我可以先对数组进行排序,然后将其分块以获得我想要的。我试图在Objective-C中提出一种合理有效的方法。
我可以设置一个字典,其中包含每个可能的排序值作为键,NSSet 作为每个键的值。然后,我可以遍历初始数组,计算每个项目的排序值,为该排序值找到合适的键,并随时更新它的集合。我终于可以对该字典的内容进行排序以获得排序集的列表。
我可以做到所有这些,但似乎应该有一个更好的方法我错过了。此外,我排序的值实际上可能是浮点值,因此将它们用作字典中的键可能价值有限。
谁能想到一个更聪明的方法来做到这一点?我在这里遗漏了一些明显的东西吗?
【问题讨论】:
-
具有多个相等元素的“集合”并不反映该词的通常含义。
-
公平一点:我试图简化问题,但我的措辞和示例有点粗心。实际上,从排序的角度来看,我将创建具有相同值的不同对象集。我已经编辑了我的描述,使其更加清晰。
-
我明白了,确定成员资格的“排序值”是某种关键功能的结果,那么?
-
是的,或多或少。我实际上需要以几种不同的方式使用这种排序,所以我使用一个选择器来计算排序值,该选择器被调用来计算排序值。但在许多情况下,我调用的排序选择器只是调用对象的 valueForKey
标签: objective-c sorting nsarray nsdictionary nsset