Генерация случайных имен из plist - PullRequest
1 голос
/ 22 июня 2010

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

Плист имеет такую ​​структуру;

Root (Dictionary)
-> Names (Dictionary)
--> Forenames (Array)
---> Item 0 (String) "Bob"
---> Item 1 (String) "Alan"
---> Item 2 (String) "John"
--> Surnames (Array)
---> Item 0 (String) "White"
---> Item 1 (String) "Smith"
---> Item 2 (String) "Black"

Мне удалось вывести все ключи для словаря, но я не уверен, как получить ключ 'Forenames' или 'Surnames' и затем сохранить его в массиве.

Код для вывода всех ключей - это простой вывод в журнал.

т.е.,

// Make a mutable (can add to it) dictionary
NSMutableDictionary *dictionary;


// Read foo.plist
NSString *path      = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"foo.plist"];

dictionary = [NSDictionary dictionaryWithContentsOfFile:finalPath];

// dump the contents of the dictionary to the console
for (id key in dictionary)
{
    NSLog(@"Bundle key=%@, value=%@", key, [dictionary objectForKey:key]);      
}

NSMutableArray *forenames;

// This doesn't work, it outputs an empty array
forenames = [dictionary objectForKey:@"Forenames"];
NSLog(@"Forenames:%@", forenames);

Вопросы,

  1. Как заставить мои имена NSMutableArray * принимать содержимое словаря 'Forenames'?

  2. После того, как я сохранил имя и фамилию в их собственных NSMutableArrays, мне нужно случайным образом выбрать имя и фамилию; какой лучший способ сделать это?

Идея заключается в том, что я могу создать файл Person.m с переменными класса Forename / Surname и создать случайно сгенерированных людей.

Спасибо.

1 Ответ

3 голосов
/ 22 июня 2010

Исходя из структуры вашего списка, я думаю, вам нужно сделать еще один уровень разыменования:

NSDictionary *names = [dictionary objectForKey:@"Names"];
NSMutableArray *forenames = [[names objectForKey:@"Forenames"] mutableCopy];
NSMutableArray *surnames = [[names objectForKey:@"Surnames"] mutableCopy];

Затем вы можете использовать srandom и random для генерации случайных индексов в ваших массивах.,Общий способ генерации случайного числа на [0, N) таков:

NSUInteger i = (NSUInteger)((random()/(double)RAND_MAX)*N);

Замените N выше на вызов массива count, и вы будете установлены.

Кстати, я не вижу причины для создания изменяемой копии массивов имен.Я просто хотел показать, как ты это сделаешь.Кроме того, вам нужно использовать srandom(time(NULL)); для получения разных случайных значений при каждом запуске вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...