Я нашел этот пост: What's the Best Way to Shuffle an NSMutableArray?Начинающие, нуждающихся в помощи на shuffeling массив
И как я стараюсь, чтобы развернуть это в моем собственном коде, я не могу заставить его работать ...
Может кто-нибудь помочь мне решить этот код?
Мне кажется, что функция тасования не называется ..?
вот мой код:
// // shuffle2ViewController.h // shuffle2
#import
@interface shuffle2ViewController : UIViewController {
NSMutableArray *puzzles;
int *randomSort;
}
- (void)shuffle;
@end
//=============================
// shuffle2ViewController.m
´#import "shuffle2ViewController.h"
@implementation shuffle2ViewController
(void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *puzzles = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", @"4",@"5",@"6",@"7",@"8",@"9", @"10",@"11",@"12", nil];
// Call the shuffle function
[self shuffle];
// print to log
int i;
NSLog(@"NEW OLD");
NSLog(@"=================");
for (i = 0; i < 12; ++i) NSLog(@" %2i %@", i + 1, [puzzles objectAtIndex:i]); }
int randomSort(id obj1, id obj2, void *context) {
// returns random number -1 0 1
return (random()%3 - 1); }
(void)shuffle { // call custom sort function
[puzzles sortUsingFunction:randomSort context:nil];
}
Давать этот результат:
NEW OLD
=================
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
Nooooooo !!!! Не используйте '-sort' для реализации перетасовки. Используйте Shuffle Fisher-Yates, который работает в O (n) вместо O (n log n) и, возможно, генерирует более равномерный результат (http://en.wikipedia.org/wiki/Fisher-Yates_shuffle). – kennytm
Лучшая ссылка на Википедию: http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle –
steffen Myklebust: Почему бы не использовать наивысший рейтинг ответа на этот вопрос? http://stackoverflow.com/questions/56648/whats-the-best-way-to-shuffle-an-nsmutablearray/56656#56656 Это не идеально ('int' обычно неправильный тип для использования в какао), но это лучше, чем основывать ваш тасование на неопознанной сортировке. –