0

次の値を持つセレクターを使用してソートするNSArrayからプルしているwith値があります。NSDictionary

  1. ジョン
  2. ブライアン
  3. アレックス...。
  4. デイブ

以下のコードを使用すると、文字列として比較されているため、リストは次のように返されます。

NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingSelector:@selector(compare:)];
  1. ジョン
  2. デイブ
  3. ブライアン..。

これらの値を1、2、3などの順序で正しく並べ替えるにはどうすればよいですか?並べ替えのいくつかの異なる例を見てきましたが、私のような例を見つけることができませんでした。また、Objective-cとiOSは初めてです。どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

1

私は実際に解決策を見つけることができました。カスタム ロジックを使用してブロックを作成し、NSComparisonResult各文字列の先頭の数字部分を読み取り、それらを数値的に比較します。

NSComparisonResult (^sortByNumber)(id, id) = ^(id obj1, id obj2)
{
    //Convert items to strings
    NSString *s1 = (NSString *)obj1;
    NSString *s2 = (NSString *)obj2;

    //Find the period and grab the number
    NSUInteger periodLoc1 = [s1 rangeOfString:@"."].location;
    NSString *number1 = [s1 substringWithRange:NSMakeRange(0, periodLoc1)];

    NSUInteger periodLoc2 = [s2 rangeOfString:@"."].location;
    NSString *number2 = [s2 substringWithRange:NSMakeRange(0, periodLoc2)];

    //Compare the numeric values of the numbers
    return [number1 compare:number2 options:NSNumericSearch];
};

次に、次のように呼び出して配列を並べ替えます。

NSArray *array = [[[self myDictionary] allValues] sortedArrayUsingComparator:sortByNumber];
于 2012-04-26T17:28:45.147 に答える