Элегантный расчет элементов массива - PullRequest
2 голосов
/ 29 августа 2011

Я хотел бы сделать некоторые вычисления и сравнения внутри моего массива

при условии, что мой массив прост как:

NSMutableArray *array;   
array = [[NSMutableArray alloc] init]; 
[array addObject:[NSNumber numberWithInt:1]]; 
[array addObject:[NSNumber numberWithInt:2]]; 
[array addObject:[NSNumber numberWithInt:2]]; 
[array addObject:[NSNumber numberWithInt:3]]; 
[array addObject:[NSNumber numberWithInt:2]]; 

Что было бы элегантным и умным способом проверить, повторяется ли число 2,3,3 или 5 раз внутри этого массива. (ищет что-то умное и динамичное ....)

Ответы [ 3 ]

5 голосов
/ 29 августа 2011

Если числа находятся в диапазоне от 0 до 10, то у вас должен быть массив из 11 элементов с именем counts.Элемент i th в массиве - это количество раз, которое i появляется в исходном массиве.Заполнение массива count является простым: один цикл по вашему первоначальному массиву (a) на каждом шаге итерации counts[a[i]].

Число i повторяется counts[i] раз.Нет , если s:)

3 голосов
/ 29 августа 2011

Вам не нужно самим проходить через все, если вы просто хотите знать, сколько раз каждый объект появляется. Этот бит действительно прост:

NSMutableArray *array;   
array = [[NSMutableArray alloc] init]; 
[array addObject:[NSNumber numberWithInt:1]]; 
[array addObject:[NSNumber numberWithInt:2]]; 
[array addObject:[NSNumber numberWithInt:2]]; 
[array addObject:[NSNumber numberWithInt:3]]; 
[array addObject:[NSNumber numberWithInt:2]]; 

NSCountedSet *counts = [[NSCountedSet alloc] initWithArray:array]

NSLog(@"%d", [counts countForObject:[NSNumber numberWithInt:2]]); // logs 3

[array release];
[counts release];
1 голос
/ 29 августа 2011

Не уверен, что это считается элегантным, но вы всегда можете создать подкласс NSMutableArray, чтобы добавить код, который подсчитывает вхождения определенных чисел по мере их добавления / удаления. В документации для NSMutableArray говорится, что редко есть веская причина для его подкласса, но в нем приводятся примеры того, когда это может иметь смысл, включая этот:

Получение дополнительной информации о том, что происходит со сбором (например, сбор статистики).

Я бы посчитал, что вы делаете, формой сбора статистики, не так ли?

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