Слияние значений массива - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть массив, который содержит все имена, которые я получаю из JSON

NSArray *name = [newResponseObject valueForKey:@"name"];

У меня также есть другой массив, который содержит все фамилии, которые я получаю из JSON.

 NSArray *lastname = [newResponseObject valueForKey:@"lastname"];

Что я хочу сделать, так это создать еще один массив, содержащий [имя, фамилия], и я хочу отобразить значения для моего представления выбора. например "Джон Смит".

Я пытался использовать arrayWithArray, но он просто добавил все значения в один массив.

Какой правильный метод для этого?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

В зависимости от того, что вы планируете делать с ними впоследствии, следует диктовать, как вы решите их хранить. Как упомянул @Woodstock, вы можете хранить их в массиве связанных строк «name фамилия», аналогично варианту 1, приведенному ниже.

Но из вашего описания звучит так, как будто вы захотите сохранить их в виде массива массивов, аналогичного варианту 2, приведенному ниже.

// option 1 storing them in concatonated strings
NSArray *firstNames = @[@"John", @"Ralph", @"Bob"];
NSArray *lastNames = @[@"Smith", @"Jones", @"Miller"];
NSMutableArray <NSString *> *firstAndLastNames = [NSMutableArray array];
for (NSInteger index = 0; index < firstNames.count; index++) {
    [firstAndLastNames addObject:[NSString stringWithFormat:@"%@ %@", [firstNames objectAtIndex:index], [lastNames objectAtIndex:index]]];
}
NSLog(@"First and last names = %@", firstAndLastNames);
// option 2 storing them in arrays
NSMutableArray <NSArray *> *firstAndLastNamesInArray = [NSMutableArray array];
for (NSInteger index2 = 0; index2 < firstNames.count; index2++) {
    [firstAndLastNamesInArray addObject:@[[firstNames objectAtIndex:index2], [lastNames objectAtIndex:index2]]];
}
NSLog(@"First and last names in array = %@", firstAndLastNamesInArray);

Что приведет к выводу:

Вариант 1:

First and last names = (
    "John Smith",
    "Ralph Jones",
    "Bob Miller"
)

Вариант 2:

First and last names in array = (
        (
        John,
        Smith
    ),
        (
        Ralph,
        Jones
    ),
        (
        Bob,
        Miller
    )
)

Преимущество использования второго варианта состоит в том, что если вы хотите просто получить имя или фамилию, вы можете просто найти их по индексу (вместо того, чтобы пытаться разделить имя и фамилию пробелом - некоторые сначала или в фамилиях также есть пробелы, так что это может испортить вашу логику попытки выбрать только одно из имен, если вы используете опцию 1).

т.е. используя опцию 2, вы можете найти фамилию третьего лица, выполнив следующее:

[[firstAndLastNamesInArray objectAtIndex:2] objectAtIndex:1]

Другой вариант - создать объект Person, у которого он будет иметь свойства firstName и lastName, а затем сохранить массив объектов Person.

Еще одна вещь, которую вы также не упомянули (но я предполагаю, что это правда), это то, что эти массивы вы выбираете с сервера в правильном порядке - то есть коррелирует ли firstName [3] с lastName [ 3]? Кроме того, всегда ли у вас есть имя и фамилия для каждого человека?

0 голосов
/ 16 ноября 2018

Есть много способов добиться этого.

Вероятно, проще всего объединить в источнике.

NSArray *fullName = [NSString stringWithFormat:@"%@ %@", [newResponseObject valueForKey:@"name"], [newResponseObject valueForKey:@"lastname"]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...