NSArrayのさまざまなソート方法でソートアルゴリズムを使用していますか? (同じソートキーを持つアイテムの相対的な順序が保存されている「安定ソート」アルゴリズムの場合と同じです。)ソートアルゴリズムはNSArrayの安定したソートで使用されていますか?
答えて
docには、同じ項目の最終的な順序についての詳細は記載されていません。
したがって、私は順序が悪い考えであると仮定していると感じます。実験的に何を決定したとしても、配列内の項目数やiOSのどのバージョンがソートを実行するかによって変わる可能性があります。
私にとって、私はドキュメントによって提供される約束に固執します。
私はそれを徹底的にテストしたとしてもそれを信用しませんでした.Appleは、次のバージョンで使用されているアルゴリズムを変更して、テストを無意味にし、奇妙なバグを引き起こす可能性があります。 – JustSid
* NSSortOptionsのドキュメントの裏に埋もれているドキュメントは* https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Constants/Reference/referenceにあります。 html#// apple_ref/doc/c_ref/NSSortOptions – wxactly
私はこれについて見つけた唯一の「公式」の答えは、Appleからのクリス・ケインによって2002 mailing list postです:
にNSArray/NSMutableArrayののソート方法の安定性が定義されていない、 ので、あなたは、彼らがあることを予想しなければなりません不安定です。定義されていないので、 の状況もリリースごとに変更される可能性がありますが、私は (自分自身)はこれがそうであると予想しています。現在の実装 は、BSDの qsort()ルーチンとほぼ同じアルゴリズムのバージョンであるクイックソートを使用しています。 1つの点でそれが のデータの一般的なタイプのそれよりもうまくいくのは難しいと私たちは を通してテストで見つけた一連の実験。 [1は、ソートされたデータについての追加情報 を持っている場合はもちろん、一方が他方のアルゴリズムまたはそのケースを助ける 修正を使用することができます。]
私はこれが何歳を考えると、まだ本当であるかどうかわかりません投稿はありますが、おそらくNSArray
のソート方法はではなく、であると仮定するのが最善です。
NSSortStable
を使用しない限り、安定した並べ替えは保証されません。 documentation on NSSortOptionsから:
NSSortStable
ソート結果が比較項目は、彼らが最初に発生した順に等しい値を持って返すことを指定します。
このオプションが指定されていない場合、等しいオブジェクトが元の順序で返されることもあれば返されないこともあります。あなたが安定したソートを保証する必要がある場合は
することは、何かしてみてください:
[array sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}];
'(void)sortWithOptions:usingComparator:'変更可能な配列のために働く... '(NSArray *)sortedArrayWithOptions:usingComparator:'これがあなたのボートを浮かべるなら – wxactly
- 1. ネストしたNSArrayを使用してNSArrayをソートする方法
- 2. ソートNSMutableArrayにはsortedArrayUsingComparatorを使用したNSArrayが含まれています
- 3. 効率的で安定した外部ソートアルゴリズムの実装(cで書かれています)は何ですか?
- 4. 基数ソートに安定ソートアルゴリズムのみを使用する必要はありますか?
- 5. ネストされたソートNSArray
- 6. Javaライブラリのプリミティブ配列ソートで使用されるソートアルゴリズム
- 7. ネストされたNSArrayでNSArrayをソートする方法
- 8. NSArrayではどのようなソート関数が使用されていますか?
- 9. 既存のNSArrayオブジェクトプロパティを使用して、セクション化されたテーブルビュー用の新しいNSArrayを作成します。
- 10. 外部ソートアルゴリズムを使用したソートの予想時間
- 11. MySQLはどのソートアルゴリズムを使用していますか?
- 12. ほぼ完全にソートされたリストを再ソートするのに最適なソートアルゴリズムはどれですか?
- 13. キューでソートアルゴリズムを使用していますか?
- 14. このソート方法は安全に使用できますか?
- 15. ソートアルゴリズムが安定しているかどうかを検出するブラックボックス方式はありますか?
- 16. 私はこのコードでどのソートアルゴリズムを使用していますか?
- 17. hadoopストリーミングは、マップとフェーズの間で安定したソートを使用しますか?
- 18. NSStringを使用したNSArrayはこれも可能ですか?
- 19. どちらのオープンソースプロジェクトでも、不安定で安定したバージョンのバージョンを使用しています
- 20. 安定したソートの逆Java(Unstable?)
- 21. Chromeの安定したソート機能
- 22. Google Chromeの安定したソート
- 23. ソートにNSArrayをソート
- 24. NSArrayのソート
- 25. 安定したアルゴリズムであるブラックボックス配列ソートアルゴリズムを変更する
- 26. MongoDBは安定していますか?
- 27. スカラーソーティングは安定していますか?
- 28. PHPはソートされた配列にforeachを使用しています
- 29. NSArray arrayWithObjects:9つのオブジェクトに限定されています
- 30. Main.javaはチェックされていない操作または安全でない操作を使用します
を、あなたはそれを試してみるましたか? –
@TDeBailleul "これを試してみてください"というのは、この場合にはあまり役に立ちません。データのサイズ、配列の作り方などによっては、並べ替えが安定している場合もありますが、それ以外のものは安定していない可能性があります。 – omz
知っておいてよかった。 –