2011-08-30 60 views
2

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 

現在有沒有更好的方法,通過更好的方式,我的意思是實現相同結果的更短途徑?因爲我很天真,我想知道是否還有其他方法可能與上述方法一樣長,但會以更好的方式排序。

謝謝

+0

你想弄清楚噸如何用更短的代碼或者更短的處理時間做更容易? – bryanmac

+4

我不明白你的問題。你提供的代碼看起來很好。我已經在Java世界工作了很多年,Objective C工作在最後2年,這些例子對我來說看起來很好。 – drekka

+0

只是一個註釋:'localizedCaseInsensitiveCompare:'使用當前的語言環境進行正確的排序,如果您期待ASCII順序,則有時會獲得「奇怪」的結果。 –

回答

4

適應它。在Objective-C中,通常甚至希望擁有長的描述性方法名稱。當然你可以用自己的方法或宏來包裝你經常使用的東西,但是我不會偏離Cocoa命名風格,因爲它會讓你的代碼難以閱讀。

請參閱Coding Guidelines for Cocoa瞭解一些背景知識。

1

我建議你適應blocks

NSArray* sortedArray =[array sortedArrayUsingComparator: ^(id thing1, id thing2) 
{ 
    /* return NSComparisonResult following conventions of strcmp */ 
}]; 

它沒有什麼比這