2013-03-28 9 views
0

я добавил объекты в NSMutableSet с этим кодом:NSMutableSet intput не в том же порядке, как выход

_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 
)} 

ответ

3

Поскольку NSMutableSet не имеет порядка. Массив упорядочен; набор нет. (Упорядоченный набор рода ликвидирует разрыв, но это не то, что вы используете.)

Читайте мелкие документации:

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

Что первое предложение?

Классы NSSet, NSMutableSet и NSCountedSet объявляют программный интерфейс неупорядоченной коллекции объектов.

Unordered. Конец истории.

Смотрите также мою книгу:

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

Вы можете пройти через (перечислить) набор с for...in конструкцией, хотя порядок, конечно, не определено.

Не определено.

(Это звучит из вашего первоначального вопроса, как если бы то, что вы действительно хотите это NSMutableArray, что вы затем перетасовать. У меня есть код для этого! Но это был бы другой вопрос.)

+0

просто заказал вашу книгу :-) – PeterK

4

Потому что он не заказан. Используйте NSMutableOrderedSet, если вам это нужно.

+0

Он не говорит, что хочет, чтобы он заказал, он говорит, что порядок, в который он был вставлен, - это не тот порядок, который он удерживает. –

+3

Понятие упорядочения в наборе бессмысленно. – matt

+0

Просто так я понимаю, если я вставляю объекты в определенном порядке, он никогда не будет отсортирован, если я не буду использовать NSMutableOrderedSet? ... означает, что мне не нужно перетасовывать объекты? – PeterK

1

NSMutableSet заказ не поддерживается. Используйте NSMutableOrderedSet или NSMutableArray для поддержания порядка