как установить начальные значения в массиве на 0 - PullRequest
1 голос
/ 03 апреля 2009

Мне нужно отслеживать строки в разделах в моем UITableView. Для этого я хочу создать массив, в котором я поместил количество строк в каждом разделе. Этот массив должен иметь определенный размер - поэтому я полагаю, что было бы лучше использовать NSArray вместо NSMutableArray.

Мой вопрос - как я могу инициализировать его с определенным количеством объектов типа NSInteger, изначально установленным в 0? И как я могу изменить этот массив - в моем конкретном случае, чтобы увеличить значение каждого элемента, когда мне это нужно?

Например:

while (objects)
{
 myArray.(object string's first letter transformed to int)++;
}

Ответы [ 4 ]

2 голосов
/ 03 апреля 2009

Если массив имеет определенный размер и все обычные целые числа (NSInteger в вашем примере), почему бы просто не использовать простой целочисленный указатель? Например:

- (id)init {
  if( (self = [super init]) ) {
    // assume this is an instance variable of type NSInteger *myArray;
    myArray = (NSInteger*)calloc(arraySize, sizeof(NSInteger));

    // Do any other initialization that you need
  }
  return self;
}

- (void)myMethod {
  // Do whatever you need
  while( objects ) { myArray[whatever]++; }
}

- (void)dealloc {
  free(myArray);
  [super dealloc];
}

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

1 голос
/ 03 апреля 2009
NSMutableArray *a = [[NSMutableArray alloc] init];
int i;

for (i = 0; i < ...; ++i)
    [a addObject:[NSNumber numberWithInt:0]];
0 голосов
/ 03 апреля 2009

Поскольку вам нужно изменить массив, вам нужно использовать изменяемый массив, а не неизменяемый.

Если вам нужно инициализировать массив из 10 элементов, для начала вы можете написать:

NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:10];

for (NSUInteger i = 0; i < 10; i++) {
    [mutableArray insertObject:[NSNumber numberWithInt:0] atIndex:i];
}
0 голосов
/ 03 апреля 2009

Вы должны перебрать весь массив следующим образом:

for ( var key in list ) {
   list[key] = // Your new object here;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...