Как создать вложенный массив или многомерный массив - PullRequest
1 голос
/ 14 июля 2009

Я пытаюсь выяснить, как сделать вложенные массивы или многомерный массив для программирования iPhone SDK с использованием target-c.

Мои данные будут примерно такими: 3 столбца и строки от 10 до 50.

name     department     year
John     Sales          2008
Lisa     Sales          2009
Gina     Support        2007

Любая помощь приветствуется

Ответы [ 4 ]

5 голосов
/ 14 июля 2009

Я не уверен, является ли это вашим примером или вашей терминологией, но на самом деле это не многомерный массив, это массив записей. Я бы сделал каждую вашу запись классом:

@interface Employee
  NSString* name;
  NSString* dept;
  NSString* year;
@end

@property (nonatomic,retain) NSString* name;
@property (nonatomic,retain) NSString* dept;
@property (nonatomic,retain) NSString* year;

// ... rest of class def


Employee* a = [[Employee alloc] init];
a.name = @"Bob";
a.dept = @"Sales";
a.year = @"2008";

// declare others

NSArray* array = [NSArray arrayWithObjects:a,b,c,nil];
[a release];

Это более объективная критика, чем использование struct.

Если вы действительно имеете в виду многомерный массив, тогда нет ничего плохого в "очевидном" подходе. Конечно, вы можете захотеть обернуть его в класс, чтобы вы могли написать несколько служебных методов, чтобы было легче с ним справиться.

1 голос
/ 14 июля 2009

Вложенные массивы - единственный по-настоящему практичный способ создания многомерного массива в Какао. Вы можете определить категорию в NSArray с помощью таких методов, как objectAtRow:column:, чтобы сделать доступ к элементам более удобным. Хотя в вашем случае я согласен с Калебом в том, что это не похоже на то, что вам это нужно - ваши данные выглядят как массив объектов.

1 голос
/ 14 июля 2009

Не могли бы вы сделать такую ​​структуру:

struct UserInfo
{
 string name;
 string department;
 int year;
}

struct UserInfo users[3];
users[0].name = "John";

etc....

и сделать массив из структуры, чтобы вам не приходилось иметь дело с многомерными массивами? Если нет, то просто игнорируй меня! :)

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

из примера @Stephen ... Вы можете сделать это, чтобы получить имя первого сотрудника.

Employee *e = (Employee *) [array objectAtIndex:0];

NSLog(@"Name: %@", e.name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...