その中で最も効率的な方法でソートするNSSet?
-
21-08-2019 - |
質問
何のために効率的な方法並べ替えについて NSSet
/NSMutableSet
物件のオブジェクトです。今すぐにやっている繰り返し処理を通じて各オブジェクトとして追加しようとすると NSMutableArray
, は、並べ替える配列 NSSortDescriptor
.
解決
タグを使用してみてください
[[mySet allObjects] sortedArrayUsingDescriptors:descriptors];
編集:iOSの≥4.0およびMac OS X≥10.6あなたが直接使用することができます。
[mySet sortedArrayUsingDescriptors:descriptors];
他のヒント
の効率的な方法"に並べ替えのオブジェクトによって異なりますかそのようなことができる。のカジュアルを前提は、以前の答えがく)は一時のようなオブジェクトセットです。この場合、私からの指示に従うことのほうが場所取りすぎでいつa toss-upと @cobbal のことだったんだろうな、次のように
NSMutableArray* array = [NSMutableArray arrayWithCapacity:[set count]];
for (id anObject in set)
[array addObject:anObject];
[array sortUsingDescriptors:descriptors];
どうしてもと言うならばこの投げが@cobbalのアプローチをつautoreleased配列のメモリフットプリントが表示されます。これはinconsequentialのための小さなセットオブジェクトが技術的なアプローチは非常に効率的です。)
しかし, であれば、ソートセット内の要素について回以上(特に場合は通常のもの)このレコード店ディスクユニオンの効率的なアプローチ.できまNSMutableArray周辺で同期させたNSSet、コsortUsingDescriptors:各時間がある場合でも配列でソートされますが未だ不十分な項目もありますがNの比較.
ココアのような効率的なアプローチを維持コレクションが並びます。Javaは TreeSet クラスの要素をソートされた順序また必要に応じて、環境に適したオブジェクトを挿入したり取り外したり、ココアではない。で正確にこの問題を乗を開発してみないかのようなもののために自分で利用します。
の一環として、データ構造の枠組みをもとに継承刷新作った プロトコルと複数の実装のためのソートセット.の他の具体的なサブクラスを維持できるセットの異なるオブジェが並びます。まだまだ改善するための一日ということなどの結果の比較:(それぞれのオブジェクトのセットを実装する必要)となか受け入れNSSortDescriptor.(回避策導入することによって、現在の比較:比較の権利のオブジェクト。)
この欠点はこれらのクラスは現在ないサブクラスのNS(可変)セットなので、合格しなければなりませんNSSetしれません。のプロトコルという設定方法を返しますNSSetのコースの順序付け.) Iプランを是正することにより、すぐにやってきたことをこのNSMutableDictionaryサブクラスの枠組みフィードバックも歓迎いたします。:-)
のiOS≥5.0およびMac OS X≥10.7あなたが直接使用することができますNSOrderedSet
NSSetの順序付けます。みappleの参照配列の秩序ます。
みNSArrayがディスカッション事例をもとに分別で http://developer.apple.com/documentation/Cocoa/Conceptual/Collections/Articles/sortingFilteringArrays ...
例からのリンク:
NSInteger alphabeticSort(id string1, id string2, void *reverse)
{
if (*(BOOL *)reverse == YES) {
return [string2 localizedCaseInsensitiveCompare:string1];
}
return [string1 localizedCaseInsensitiveCompare:string2];
}
// assuming anArray is array of unsorted strings
NSArray *sortedArray;
// sort using a selector
sortedArray =
[anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
// sort using a function
BOOL reverseSort = NO;
sortedArray =
[anArray sortedArrayUsingFunction:alphabeticSort context:&reverseSort];
あなたは、理由をNSSetを並べ替えることはできませんNSArrayのように結果セット... そして、すべての上側のヒントが唯一の配列で動作:)
NSArray *myArray = [mySet sortedArrayUsingDescriptors:descriptors];
完璧な作業、および他の方法を必要としません。)
OS X 10.7とiOS 5.0以来NSOrderedSet
があります。あなたは、セット内のオブジェクトを保持し、その順序を維持するためにそれを使用することができます。 NSMutableOrderedSet
は、ソートするためのメソッドがあります。
あなたがソートされた項目を格納するためにNSArray
のような別のオブジェクトを作成する必要はありませんので、いくつかの状況では、これは、パフォーマンスの向上を与える可能性があります。