-1

私はNSSetのオブジェクトを持っています。

セット内の各オブジェクトは、MyObjectというプロパティを持つのインスタンスですname

NSArray名前の値を含む nameIndexes という名前の別のものがあります。

NSSetnameIndexes 配列内の位置に基づいて name プロパティを使用してソートされた配列を受け取り、返す関数が必要です。

編集:

誤解を招いて申し訳ありません。例を次に示します。

私は MyObject のセットを持っています(同じ順序ではないかもしれません):

MyObject1 {name:@"A"}

MyObject2 {name:@"B"}

MyObject3 {name:@"C"}

私は別の名前の配列を持っています:

{"B", "A", "C"}

次の NSArray が必要です。

{MyObject2, MyObject1, MyObject3}
4

1 に答える 1

6
NSSet *set = //your set.

NSArray *nameIndexes = //the array of names for sorting.

NSArray *result = [[set allObjects] sortedArrayUsingComparator:^NSComparisonResult(MyObject *obj1, MyObject *obj2) {
    int index1 = [nameIndexes indexOfObject:obj1.name];
    int index2 = [nameIndexes indexOfObject:obj2.name];
    return [[NSNumber numberWithInt:index1] compare:[NSNumber numberWithInt:index2]];
}];

あなたが何を求めているのか100%確実ではありませんが、これは一連の名前を並べ替え、2番目の配列の名前のインデックスに基づいて並べ替えられた配列に変換します。

編集後

編集...わかりました。編集により質問が完全に変更されました。とにかく、あなたができる編集から...

NSArray *result = [[set allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:"name" ascending:YES]]];

これはセットを受け取り、オブジェクトの name プロパティでアルファベット順にソートされたソート済み配列を返します。

于 2013-01-04T01:48:04.813 に答える