在目标中排序NSArray的更好方法 - C
问题描述:
G'Day Everyone,在目标中排序NSArray的更好方法 - C
最近我开始学习iOS开发。我通过学习Objective C语言开始了我的学习过程。在我熟练掌握Java之前,在自然的计算机意义上说“Java是我的第一语言”。
因此,当我在Obj-C中看到非常长的方法时,我遇到了很多困难,这意味着要做很简单的事情。让我分享一些代码,这是非常长的只是排序的NSArray内容升序和降序(按字母顺序)
排序的NSArray在升序A - Z
[dataToShow sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; // dataToShow is my NSArray
排序的NSArray在降序排列Z - A
NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO selector:@selector(localizedCompare:)];
[dataToShow sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]; // dataToShow is my NSArray
现在有没有更好的方法,通过更好的方式,我的意思是实现相同结果的更短途径?因为我很天真,我想知道是否还有其他方法可能与上述方法一样长,但会以更好的方式排序。
谢谢
答
适应它。在Objective-C中,通常甚至希望拥有长的描述性方法名称。当然你可以用自己的方法或宏来包装你经常使用的东西,但是我不会偏离Cocoa命名风格,因为它会让你的代码难以阅读。
请参阅Coding Guidelines for Cocoa了解一些背景知识。
答
我建议你适应blocks。
NSArray* sortedArray =[array sortedArrayUsingComparator: ^(id thing1, id thing2)
{
/* return NSComparisonResult following conventions of strcmp */
}];
它没有什么比这
你想弄清楚吨如何用更短的代码或者更短的处理时间做更容易? – bryanmac
我不明白你的问题。你提供的代码看起来很好。我已经在Java世界工作了很多年,Objective C工作在最后2年,这些例子对我来说看起来很好。 – drekka
只是一个注释:'localizedCaseInsensitiveCompare:'使用当前的语言环境进行正确的排序,如果您期待ASCII顺序,则有时会获得“奇怪”的结果。 –