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

Я хочу создать случайную строку, используя массив словаря.Я хочу генерировать случайные вопросы, когда пользователь запускает приложение.Я сделал со случайными строками, используя массивы.Но я не мог создать случайные строки, используя массив словаря.Итак, как создать случайную строку, используя словарь.Массив строк будет меняться каждый раз, когда запускается приложение, так как я могу генерировать случайные строки?

Например:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"List" ofType:@"plist"];

NSArray* pointStrings = [[NSArray alloc] initWithContentsOfFile:filePath];

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

The array is (
        {
        id = 1;
        question = India;
        answer = Punjab;
       },

        {
         id = 2;
         question = Kolkatta;
         answer = "West Bengal";
    },
        {
        id = 3;
        question = Mumbai;
         answer = Maharastra;

    } )

Ожидаемый массив,

Случайный массив (

         {
         id = 2;
         question = Kolkatta;
         answer = "West Bengal";
    },
        {
        id = 3;
        question = Mumbai;
         answer = Maharastra;

    },
        id = 1;
        question = India;
        answer = Punjab;
       })

Спасибо.

Ответы [ 3 ]

3 голосов
/ 09 мая 2011

Очень простое решение - создать временный массив со всеми строками, которые есть в вашем словаре. Тогда используйте

int index = arc4random() % [tempArray count];
[randomArray addObject:[tempArray objectAtIndex:index]];
[tempArray removeObjectAtIndex:index];

А потом повторяйте это, пока не будете удовлетворены.

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

Pugal,

Используйте NSMutableArray вместо NSArray, чтобы вы могли иметь больше методов для доступа,

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 = (random() % nElements) + i;
    [self exchangeObjectAtIndex:i withObjectAtIndex:n];
}

Проверкассылка для дальнейшего использования: Какой лучший способ перемешать NSMutableArray? Джонсон уже хорошо объяснил в нем.

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

Я знаю "хитрость" для этого.Если вы используете plist-файл, вы можете создать свой файл следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>firstStringKey</key>
    <dict>
        <key>something</key>
        <string>foo</string>
    </dict>
    <key>secondStringKey</key>
    <dict>
        <key>something</key>
        <string>foo</string>
    </dict>
    <key>thirdStringKey</key>
    <dict>
        <key>something</key>
        <string>foo</string>
    </dict>
</dict>
</plist>

После этого, когда вы перезагрузите свой файл следующим образом:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"List" ofType:@"plist"];

NSDictionary* allFile = [[NSDictionary alloc] initWithContentsOfFile:filePath];

NSArray* pointStrings = [allFile allKeys];

Это возвращает все ключи словаря, но без порядка... Может быть, вы можете использовать это. NSDictionary документация

...