我刚开始学习Objective-C,我正在尝试对数组进行排序,以使其尽可能地低差异。
int main()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *myColors;
myColors = [NSMutableArray arrayWithObjects: @"Red", @"Red",@"Red", @"Red", @"Red", @"Green", @"Green", @"Green", @"Blue", @"Blue", @"Blue", @"Yellow", nil];
srandom(time(NULL));
NSUInteger count = [myColors count];
for (NSUInteger i = 0; i < count; ++i) {
int nElements = count - i;
int n = (random() % nElements) + i;
[myColors exchangeObjectAtIndex:i withObjectAtIndex:n];
NSLog (@"Element %i = %@", i, [myColors objectAtIndex: i]);
}
[pool drain]; return 0;
}
输出结果大致为:
Element 0 = Blue
Element 1 = Green
Element 2 = Yellow
Element 3 = Blue
Element 4 = Green
Element 5 = Red
Element 6 = Red
Element 7 = Red
Element 8 = Blue
Element 9 = Green
Element 10 = Red
Element 11 = Red
这个功能可以对数组进行洗牌,但由于随机数的原因,它的低差异性不如我所希望的。
理想情况下,每个实例应该尽可能远离其同类,例如:
Red, Green, Red, Blue, Red, Green, Yellow, Red, Blue, Red, Green, Blue
任何帮助和建议都将是很好的,我已经在这个问题上忙碌了一整天。
Red
。 - swegi