【发布时间】:2010-03-12 17:38:55
【问题描述】:
我发现了这个帖子:What's the Best Way to Shuffle an NSMutableArray?
当我尝试在我自己的代码中部署它时,我无法让它工作......
谁能帮我解决这个代码?
对我来说,似乎没有调用 shuffle 函数..?
这是我的代码:
// // 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
【问题讨论】:
-
不!!!!不要使用
-sort来实现洗牌。使用 Fisher-Yates shuffle,它在 O(n) 而不是 O(n log n) 中运行,并且可能产生更统一的结果 (en.wikipedia.org/wiki/Fisher–Yates_shuffle)。 -
steffen Myklebust:为什么不使用该问题中评价最高的答案? stackoverflow.com/questions/56648/… 这并不理想(
int通常是在 Cocoa 中使用的错误类型),但它比基于未识别排序的随机播放要好。 -
感谢大家的意见。这是我最终得到我想要的结果的结果。 -(void)shuffle { NSUInteger n = [拼图数]; while(1
标签: iphone objective-c cocoa cocoa-touch shuffle