在iPhone中使用NSArray生成随机字符串?

时间:2011-05-20 12:23:31

标签: iphone string random nsarray

我有一个数组,它有一些数据。现在我想随机改变字符串的位置,这意味着,想要将字符串混洗到数组中。但是我不想改变数组的顺序,我想只改变命令字符串并且不改变数组索引的位置。

我的实际数组是(

         (
        first,
        second,
        third,
        fourth
    ),
        (
        One,
        Two,
        Three,
        Four
    ),
        (
        sample,
        test,
        demo,
        data
    )
)

预期结果,

  (
        (
        second,
        fourth,
        third,
        first
    ),
        (
         Two,
         Four,
         One,
         Three
    ),
        (
        test,
        demo,
        sample,
        data
    )
)

请帮帮我。

谢谢!

3 个答案:

答案 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];