2010-12-07 34 views
3

Whew ... whatタイトル。だから私はAPI呼び出しから取得されたデータが割り当てられているNSMutableArrayを持っています。私は、API呼び出しの応答の構造を制御することはできませんし、配列形式で配列を並べ替えたいと思います。私は私が知っているSort Objective-c配列を含むオブジェクトを含む配列

 
myObjects = 
array(
    0 => object(
    name => @"Jack", 
    favoriteNumbers => object(
     numbers => array(
     0 => 7, 
     1 => 11, 
     2 => 6 
    ) 
    ) 
), 
    1 => object(
    name => @"Jill", 
    favoriteNumbers => object(
     numbers => array(
     0 => 1, 
     1 => 2, 
     2 => 3 
    ) 
    ) 
), 
    3 => object(
    name => @"Sally", 
    favoriteNumbers => object(
     numbers => array(
     0 => 68, 
     1 => 103, 
     2 => 99 
    ) 
    ) 
) 
) 

これは、(物事をシンプルに保つために)愚かな例ですが、私は並べ替えたいよ配列は、このような何かを表現することができる(他のソリューションはもちろん、歓迎します)

 
NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO] autorelease]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 
NSArray *sortByDurationArray = [myObjects sortedArrayUsingDescriptors:sortDescriptors]; 
// the variable "myObjects" holds the array representation from above 

しかし、どのように私は最初のお気に入り番号ごとに配列を並べ替えるのですか?

目的の結果は、次の順序で配列をソートします。Jill、Jack、Sally; Jillの1番目のお気に入り番号は1、Jack'sは7、Sally'sは68です。

答えて

2

NSSortDescriptorselectorプロパティはここで使用できます。これらのオブジェクトが独自のサブクラスである場合は、NSComparisonResultを返す-compareFavoriteNumberToObject:のようなセレクタを作成します。オブジェクトがちょうどNSDictionaryのようなものであれば、クラスに対してカテゴリを作成して比較を行うことができます。

+1

私の "colors"クラスで、-compareFavoriteNumberToObject:などのセレクタを作成して、NSComparisonResultを返す2つの "colors"オブジェクトを比較することをお勧めしますか?もしそうなら、私は配列をソートするためにこれを行うでしょうか? [myObjects sortUsingSelector:@セレクタ(compareFavoriteNumberToObject :)]; –

+0

ええ、それは適切な音です。厳密に言えば、私は '-compareFavoriteNumberWithColor:'を使うでしょう。なぜならあなたはどんなオブジェクトも使うことができないからです。 –

関連する問題