Я хотел бы провести некоторые вычисления и сравнения внутри своего массива
Предполагая, что мой массив прост как:
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, 4 или 5 раз внутри этого массива? (ищу что-то умное и динамичное ....)
3 ответа
Вам не нужно перебирать вещи самостоятельно, если вы просто хотите знать, сколько раз появляется каждый объект. Это действительно просто:
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];
Если числа находятся только в диапазоне от 0 до 10, тогда у вас должен быть массив из 11 элементов с именем counts
. Элемент i th в массиве - это количество раз, когда i
появляется в исходном массиве. Заполнить массив count
просто: один цикл через ваш исходный массив (a
) на каждой итерации приращения counts[a[i]]
.
Число i
повторяется counts[i]
раз. Нет if :)
Не уверен, что это кажется вам элегантным, но вы всегда можете создать подкласс NSMutableArray, чтобы добавить код, который подсчитывает вхождения определенных чисел по мере их добавления / удаления. В документации для NSMutableArray говорится, что редко есть веская причина для его подкласса, но в ней приводятся примеры того, когда это может иметь смысл, в том числе этот:
Получение дополнительной информации о том, что происходит с коллекцией (например, сбор статистики).
Я бы рассмотрел то, что вы делаете, как форму сбора статистики, не так ли?
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].