我有一个数组,它有一些数据。现在我想随机改变字符串的位置,这意味着,想要将字符串混洗到数组中。但是我不想改变数组的顺序,我想只改变命令字符串并且不改变数组索引的位置。
我的实际数组是(
(
first,
second,
third,
fourth
),
(
One,
Two,
Three,
Four
),
(
sample,
test,
demo,
data
)
)
预期结果,
(
(
second,
fourth,
third,
first
),
(
Two,
Four,
One,
Three
),
(
test,
demo,
sample,
data
)
)
请帮帮我。
谢谢!
答案 0 :(得分:1)
NSIndexSet
专为此类任务而设计。
答案 1 :(得分:1)
这并不难。您应该执行以下操作:
向NSArray添加类别。以下实施来自Kristopher Johnson,因为他回答了this问题。
// This category enhances NSMutableArray by providing
// methods to randomly shuffle the elements.
@interface NSMutableArray (Shuffling)
- (void)shuffle;
@end
// NSMutableArray_Shuffling.m
#import "NSMutableArray_Shuffling.h"
@implementation NSMutableArray (Shuffling)
- (void)shuffle
{
NSUInteger count = [self count];
for (NSUInteger i = 0; i < count; ++i) {
// Select a random element between i and end of array to swap with.
int nElements = count - i;
int n = (arc4random() % nElements) + i;
[self exchangeObjectAtIndex:i withObjectAtIndex:n];
}
}
@end
现在你有一个名为shuffle的方法,它可以改变你的数组。现在,您可以执行以下操作,以便只对内部数组中的字符串进行洗牌:
for (NSMutableArray *array in outerArray) {
[array shuffle];
}
现在内部阵列被洗牌了。 但请记住,内部数组需要是NSMutableArrays。否则你将无法改变它们。 ; - )
Sandro Meier
答案 2 :(得分:0)
int randomIndex;
for( int index = 0; index < [array count]; index++ )
{
randomIndex= rand() % [array count] ;
[array exchangeObjectAtIndex:index withObjectAtIndex:randomIndex];
}
[array retain];