2011-05-20 40 views
1

我有一個數組,它有一些數據。現在我想隨機更改字符串的位置,這意味着要將字符串混洗到數組中。但我不想改變數組的順序,我只想改變順序的字符串,並不改變數組索引的位置。在iPhone中使用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 
    ) 
) 

請幫助我。

謝謝!

回答

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

0

int randomIndex;

for(int index = 0; index < [array count]; index++) 
{ 
    randomIndex= rand() % [array count] ; 

    [array exchangeObjectAtIndex:index withObjectAtIndex:randomIndex]; 
} 
[array retain];