web-dev-qa-db-fra.com

Comment obtenir le dernier objet d'un NSArray

J'ai donc un tableau dont la quantité d'articles peut varier. Je me demandais s'il y avait de toute façon le dernier objet d'un NSArray? J'ai pensé à avoir comme un compteur int pour tracer la quantité d'articles dans le tableau, mais cela semble trop compliqué.

Quelqu'un sait-il que c'est mieux que ça?

42

Développant un peu la question, il existe plusieurs situations dans lesquelles on pourrait avoir besoin du dernier objet d'un tableau, avec différentes façons de l'obtenir.

Dans un programme Cocoa simple

Si l'on veut juste obtenir l'objet au cours d'un programme Cocoa standard, alors cela le fera:

[myArray lastObject]

Pour répondre à la préoccupation du compteur - pas besoin de mettre en œuvre le sien, soit:

NSUInteger myCount = [myArray count];

Utilisation du codage clé-valeur (KVC)

Dans le cas où l'on a besoin d'accéder au dernier objet d'un tableau via KVC, l'histoire nécessite un peu d'explication.

Tout d'abord, demander la valeur d'une clé normale à un tableau créera un nouveau tableau composé des valeurs de cette clé pour chacun des objets du tablea. En d'autres termes, une demande de clé lastObject à partir d'un tableau fera envoyer le tableau valueForKey: à chacun des objets en utilisant la touche lastObject sur eux. En plus d'être le résultat escompté, il lèvera probablement une exception.

Donc, dans le cas où l'on a vraiment besoin d'envoyer une clé au tableau lui-même (par opposition à son contenu), la clé doit être précédée d'un @-signe. Cela indique au tableau que la clé est destinée au tableau lui-même, et non à son contenu.

La clé doit donc avoir la forme @lastObject, et être utilisé comme ceci:

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

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

Dans un descripteur de tri

Un exemple de la façon dont cette clé pourrait être utilisée dans un programme réel est une situation où un tableau de tableaux doit être trié par l'objet last dans chacun des tableaux internes.

La clé ci-dessus est simplement utilisée dans le descripteur de tri:

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

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

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

Dans un prédicat

De même, afin de filtrer un tableau de tableaux, la clé peut être utilisée directement dans un prédicat:

NSPredicate *pred = [NSPredicate predicateWithFormat: @"self.@lastObject > 5"];

NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred];

Les personnes qui préfèrent laisser la partie self- peuvent simplement utiliser le format @"@lastObject > 5"

99
Monolo
[yourArray lastObject];

voir documentation

18
Krishnabhadra

Peut-être comme ça:

id object = [myArray lastObject];

Une bonne astuce consiste à cliquer sur n'importe quel symbole pour lequel vous souhaitez lire la documentation. Par exemple, maintenez la touche Option enfoncée et cliquez sur n'importe quel texte indiquant NSArray dans votre éditeur Xcode.

Vous obtenez une fenêtre contextuelle Nice avec les bases et un lien pour une documentation détaillée complète.

10
PeyloW

Ou si vous voulez vous faire plaisir:

yourArray.lastObject 
2
bbrame