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.aeth.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 回答