![](/img/trans.png)
[英]How do I remove leading & trailing whitespace of NSString inside an NSArray?
[英]I have an NSArray on NSString's, but some of the strings are only numbers. How do I sort numerically properly?
我的NSArray包含100,110,91,98和87,所有NSStrings。
我想按順序排列它們:87,91,98,100,110。
相反,它們顯示為100,110,87,91,98。
不幸的是,我不能用所有的int而不是字符串來啟動數組。 任何人都有任何想法如何判斷數組是否只包含字符串中的數字,也許使用for循環? 然后我可以將它們全部轉換為數組中的整數並按此方式進行排序。 或者也許有一種我想念的簡單方法?
如果有人有任何想法,請告訴我。
您可以使用NSNumericSearch
選項來NSString比較函數以數字方式對字符串進行排序。 要使用NSArray執行此操作,您需要編寫一個塊或函數來調用compare:options:
方法。
NSArray *theStrings; // Contains strings, some of which are numbers
NSArray *theSortedStrings = [theStrings sortedArrayUsingComparator:^(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
如果字符串中有一個數字,也將在數字上排序,即"abcd89"
將出現在"abcd123"
之前。
排序方法總是按順序放置對象。 訂單取決於對象或您。
所以你需要做的是以下之一:
第一門是一招半。 NSString和其他類集群不允許您繼承實現; 你可以創建自己的字符串類,但是你基本上需要從頭開始做任何事情(或者在字符串中包裝一個字符串並將除了compare:
之外的所有消息轉發給它)。
門2號更容易。 幾乎每一個排序方法都采用你實現的塊或函數; 無論哪種方式,塊/函數從數組中獲取兩個對象,比較它們,並返回它們所在的順序。
您的塊/函數應將compare:options:
消息發送到它接收的兩個字符串之一,傳遞NSNumericSearch
選項 ,並返回結果。
使用NSArray詢問字符串如何比較,並詢問字符串如何以數字方式進行比較,然后數組將按數字順序對其對象進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.