2011-06-27 9 views
1

誰かがこのクラスをID用のNSStringを持つように設計しました(正直な理由はわかりません)。したがって、一部のオブジェクトはID(空白)のために@ ""、そのうち@ "id12345"などがあります。文字列内のNSStringとNSNumberを比較する

stringByReplacingOccurrencesOfString:@"id" withString:@""]; 

ので、私は数を得ることができる:私は私がやった

まず最初に使用した私のUITableViewのための数でソートします。 NSStringからNSIntegerを取得する便利なメソッドがあると確信していますが、まだそれを調べていません。

私のオブジェクトMarkersにはこのIDのNSStringがあるので、オブジェクトの元の値を置き換えずに数値でソートするにはどうすればいいですか?私の最初の考えは、nsstringからID番号を取得して並べ替えることでした。しかし、私は元のnsstringの代わりにしたくなかった。私が持っているクラスは、基本的にデータの表示と並べ替えだけです。

これは私がこれまで持っているものです。

- (NSArray *)sortByID:(NSArray *)sortDescriptors { 
    for (Marker *m in self.MarkersList) { 
     if (![m.id length] == 0) { 
      NSString *str = [m.id stringByReplacingOccurrencesOfString:@"id" withString:@""]; 
     // don't know what to do here.... 
     } 
    } 
    return [self.MarkersList sortedArrayUsingDescriptors:sortDescriptors]; 
} 

答えて

0

だからがあなたが文字列を使用することができ、文字列からIDを交換、その後の後、すべての文字列がID ######のように見えることが保証されている場合intValueメソッドを使用して文字列のint値を取得し、2つのintを比較します。これが役に立ちます。

2

数字でソートするだけなので、ここではsortDescriptorsをなぜ使用しているのかわかりません。

私は(あなたが上記のiOS 4かにしていると仮定した場合)、コンパレータブロックを使用し、以下のようにそれを行うだろう:

- (NSArray *)sortByID { 

NSArray* orderedList = [self.MarkersList 
         sortedArrayUsingComparator:^(id obj1, id obj2) 
        { 
         Marker* m1 = (Marker*) obj1; 
         Marker* m2 = (Marker*) obj2; 

         NSString* str; 

         str = [m1.id stringByReplacingOccurrencesOfString:@"id" 
           withString:@""]; 
         NSInteger num1 = [str integerValue]; 

         str = [m2.id stringByReplacingOccurrencesOfString:@"id" 
           withString:@""]; 
         NSInteger num2 = [str integerValue]; 

         NSComparisonResult result; 
         if (num1 < num2) { 
          result = NSOrderedAscending; 
         } else if (num1 == num2) { 
          result = NSOrderedSame; 
         } else { 
          result = NSOrderedDescending; 
         } 

         return result; 
        }]; 


return orderedList; 
}