簡體   English   中英

我在NSString上有一個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"之前。

排序數組有很多選項 ; 這不是真正的問題。

排序方法總是按順序放置對象。 訂單取決於對象或您。

所以你需要做的是以下之一:

  1. 獲取字符串以數字方式比較自己。
  2. 獲取數組要求您比較它們,然后用數字比較它們。

第一門是一招半。 NSString和其他類集群不允許您繼承實現; 你可以創建自己的字符串類,但是你基本上需要從頭開始做任何事情(或者在字符串中包裝一個字符串並將除了compare:之外的所有消息轉發給它)。

門2號更容易。 幾乎每一個排序方法都采用你實現的塊或函數; 無論哪種方式,塊/函數從數組中獲取兩個對象,比較它們,並返回它們所在的順序。

您的塊/函數應將compare:options:消息發送到它接收的兩個字符串之一,傳遞NSNumericSearch選項 ,並返回結果。

使用NSArray詢問字符串如何比較,並詢問字符串如何以數字方式進行比較,然后數組將按數字順序對其對象進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM