Генерировать случайные строки с помощью NSArray в iPhone? - PullRequest
1 голос
/ 20 мая 2011

У меня есть один массив, и у него есть некоторые данные.Теперь я хочу случайным образом изменить позиции строк, что означает, что я хочу перетасовать строки в массив.Но я не хочу менять порядок массива, я хочу изменить только порядок строк и не менять позицию индекса массива.

Мой фактический массив (

         (
        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 ]

1 голос
/ 20 мая 2011

Это не так сложно сделать.Вы должны сделать следующее:

Добавить категорию в NSArray.Следующая реализация взята из Кристофера Джонсона , когда он ответил на этот вопрос.

// 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.Иначе вы не сможете их перетасовать.; -)

Сандро Мейер

1 голос
/ 20 мая 2011

NSIndexSet предназначен для таких задач.

0 голосов
/ 20 мая 2011

int randomIndex;

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

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