我有一个由带有键的对象组成的NSArray,比如“名字”和“时间”.这是一个例子,而不是用语言表达它:
input:name: timeB: 4C: 8B: 5C: 4A: 3C: 2A: 1A: 7B: 6desired output:name: timeA: 1 <---A: 3A: 7C: 2 <---C: 4C: 8B: 4 <---B: 5B: 6
因此,值按“时间”排序,并按“名称”分组. A首先是因为他的时间值最小,而A的所有值都是相继的.然后是C,他的所有价值都是第二小的时间价值.我已经指出了确定名称排序方式的值;在每个名称组中,按时间排序.
如何以最有效的方式从输入到输出NSArray? (cpu-和内存方面,不一定是代码方式.)我如何为此构造NSSortDescriptors,或使用任何其他方法?我不想自己动手,除非这是最有效的方式.
解决方法sortedArrayUsingDescriptors:
NSArray方法可满足您的大部分需求: The first descriptor specifIEs the primary key path to be used in sorting the receiver’s contents. Any subsequent descriptors are used to further refine sorting of objects with duplicate values. See NSSortDescriptor for additional information.
还需要使用nspredicate进行一些过滤:
NSSortDescriptor *timeSD = [NSSortDescriptor sortDescriptorWithKey: @"time" ascending: YES];NSMutableArray *sortedByTime = [UnsortedArray sortedArrayUsingDescriptors: timeSD];NSMutableArray *sortedArray = [NSMutableArray arrayWithCapacity:[sortedByTime count]];while([sortedByTime count]) { ID groupLead = [sortedByTime objectAtIndex:0]; nspredicate *groupPredicate = [nspredicate predicateWithFormat:@"name = %@",[groupLead name]]; NSArray *group = [sortedByTime filteredArrayUsingPredicate: groupPredicate]; [sortedArray addobjectsFromArray:group]; [sortedByTime removeObjectsInArray:group];}
我不知道这是否是最有效的方法,但在您有理由相信它导致问题之前,无需担心性能影响.这是不成熟的优化.我不会对这种方法的性能有任何担忧.你必须相信这个框架,否则你最终会重写它(从而破坏框架的重点),因为没有根据的偏执.
总结以上是内存溢出为你收集整理的cocoa – 帮助在两个属性中对NSArray进行排序(使用NSSortDescriptor?)全部内容,希望文章能够帮你解决cocoa – 帮助在两个属性中对NSArray进行排序(使用NSSortDescriptor?)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)