Подтвердить что ты не робот

Как получить последний объект NSArray

Итак, у меня есть массив, размер которого может варьироваться. Мне было интересно, если в любом случае я могу получить последний объект NSArray? Я действительно думал о том, чтобы иметь как счетчик int, чтобы отслеживать количество элементов в массиве, однако это кажется слишком большим количеством хлопот.

Кто-нибудь знает, что лучше, чем это?

4b9b3361

Ответ 1

Развернув бит в вопросе, существует несколько ситуаций, в которых может потребоваться последний объект массива, с разными способами его получения.

В прямой программе Cocoa

Если кто-то хочет получить объект в рамках стандартной программы Cocoa, то это сделает это:

[myArray lastObject]

Чтобы решить проблему счётчика - нет необходимости реализовывать один из них:

NSUInteger myCount = [myArray count];

Использование кодирования с ключом (KVC)

Если вам нужно получить доступ к последнему объекту массива через KVC, история требует немного объяснения.

Во-первых, запрос значения нормального ключа из массива создаст новый массив, состоящий из значений этого ключа для каждого из объектов в массиве. Другими словами, запрос на ключ lastObject из массива заставит массив отправлять valueForKey: каждому из объектов с помощью клавиши lastObject на них. Помимо того, что он не является ожидаемым результатом, он также, вероятно, сделает исключение.

Итак, если вам действительно нужно отправить ключ самому массиву (в отличие от его содержимого), ключ должен быть добавлен с помощью @ -sign. Это сообщает массиву, что ключ предназначен для самого массива, а не его содержимого.

Следовательно, ключ должен иметь форму @lastObject и использоваться следующим образом:

NSArray *arr = @[@1, @2, @3];

NSNumber *number = [arr valueForKey: @"@lastObject"];

В дескрипторе сортировки

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

Вышеприведенный ключ просто используется в дескрипторе сортировки:

NSArray *arrayOfArrays = @[@[@5, @7, @8], @[@2, @3, @4, @6], @[@2, @5]];

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @"@lastObject" ascending: YES];

NSArray *sorted = [arrayOfArrays sortedArrayUsingDescriptors: @[sd]];

В предикате

Аналогично, для фильтрации массива массивов ключ может использоваться непосредственно в предикате:

NSPredicate *pred = [NSPredicate predicateWithFormat: @"[email protected] > 5"];

NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred];

Люди, предпочитающие оставить self -part, могут просто использовать формат @"@lastObject > 5"

Ответ 3

Может быть, так:

id object = [myArray lastObject];

Хорошим советом является щелчок по любому символу, который вы хотите прочитать для документации. Например, удерживайте клавишу выбора и щелкните любой текст, который говорит NSArray в вашем редакторе Xcode.

Вы получаете хорошее всплывающее окно с основными сведениями и ссылку на полную подробную документацию.

Ответ 4

Или, если вы хотите получить фантазию:

yourArray.lastObject