1

私は

NSDictionary* dict = [[NSDictionary alloc]initWithObjectsAndKeys::arrayOne,@"Plants",arrayTwo,@"Animals"),arrayThree,@"Birds",nil];`

self.displayArray =[[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];

すべて正常に動作します。テーブル内のすべてのキー値/ペアを確認できますが、それらはソートされています。すなわち、動物、鳥、植物。

しかし、私は植物、動物、鳥として表示したい.

カスタマイズした順序で配列をソートする方法を教えてもらえますか? グーグルで調べたところ、並べ替えに NSSortDescriptor を使用できることがわかりました。しかし、私はそれについてあまり明確ではありません。誰でも私を助けることができますか?

4

2 に答える 2

1

順序付けは自然順序に従わないため、簡単な解決策は別の配列で順序を追跡することです

NSArray *array1 = [NSArray arrayWithObjects:@"rose",@"orchid",@"sunflower",nil];
NSArray *array2 = [NSArray arrayWithObjects:@"dog", @"cat",@"ogre",@"wookie", nil];
NSArray *array3 = [NSArray arrayWithObjects:@"parrot",@"canary bird",@"tweety",@"bibo",nil];


NSArray *keys = [NSArray arrayWithObjects:@"Plants",@"Animals",@"Birds", nil];

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                                    array1,[keys objectAtIndex:0],
                                    array2,[keys objectAtIndex:1], 
                                    array3,[keys objectAtIndex:2], 
                          nil];

for (NSString *key in keys) {
    NSLog(@"%@ %@", key, [dict objectForKey:key]);
}

Matt は素晴らしいブログで、順序付けされた辞書を作成する方法を示しています。これは、ここで示したのと同じように、基本的に別の配列を使用して順序を維持します。

于 2012-05-24T09:38:40.100 に答える
1

シリル、あなたは正しい道を進んでいます。

「ソート記述子の作成と使用」に関する Apple のドキュメントを次に示します。

基本的には、NSSortDescriptor をサブクラス化し、そのサブクラスで独自の「compare:」メソッドを実装する必要があります (実際には任意の名前を付けることができます。「NSComparisonResult」を返す必要があります)。このメソッドは、論理的に「動物」の前に「植物」を返します。

于 2012-05-24T09:28:18.740 に答える