1

次のコードを使用して、NSMutableSet にオブジェクトを追加しました。

_theQuestionsSet = [[NSMutableSet alloc]initWithObjects:@802, @229, @522, @712, @628, @84, @412, @726, @284, @699, @1765, @1754, @1528, @2230, @2005, @1494, @1348, @2132, @2040, @2183, nil];
NSLog(@"%@", _theQuestionsSet);

出力が挿入された順序と同じでないのはなぜですか?

2013-03-28 16:41:50.178 xxxxxxxx[4011:c07] {(
412,
1754,
628,
726,
1528,
284,
1348,
84,
2005,
699,
522,
712,
1494,
2132,
2230,
1765,
2040,
802,
2183,
229
)}
4

3 に答える 3

4

注文していないからです。NSMutableOrderedSet必要な場合に使用します。

于 2013-03-28T15:48:24.140 に答える
3

NSMutableSet には順序がないためです。配列は順序付けられています。セットではありません。(順序付けられたセットの種類はギャップを埋めますが、それはあなたが使用しているものではありません.)

素晴らしいドキュメントを読んでください:

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html

最初の文は何ですか?

NSSet、NSMutableSet、および NSCountedSet クラスは、順序付けされていないオブジェクトのコレクションへのプログラム インターフェイスを宣言します。

順不同。話の終わり。

私の本も参照してください:

http://www.apeth.com/iOSBook/ch10.html#_nsset_and_friends

for...in順序はもちろん定義されていませんが、コンストラクトを使用してセットをウォークスルー (列挙) できます。

順序は未定義です。

(元の質問から、あなたが本当に欲しいのは、シャッフルする NSMutableArray であるかのように聞こえます。そのためのコードがあります!しかし、それは別の質問になります。)

于 2013-03-28T15:50:40.077 に答える
1

NSMutableSet の順序は維持されません。NSMutableOrderedSet または NSMutableArray を使用して順序を維持する

于 2013-03-28T15:51:54.327 に答える