42 votes

Comment obtenir le dernier objet d'un NSArray ?

J'ai donc un tableau dont le nombre d'éléments peut varier. Je me demandais s'il était possible de récupérer le dernier objet d'un tableau de type NSArray ? J'ai pensé à avoir comme un int pour connaître le nombre d'éléments dans le tableau, mais cela semble trop compliqué.

Quelqu'un connaît-il une solution meilleure que celle-ci ?

99voto

Monolo Points 11263

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

Dans un programme Cocoa classique

Si l'on veut simplement obtenir l'objet au cours d'un programme Cocoa standard, alors ceci fera l'affaire :

[myArray lastObject]

Pour répondre à la préoccupation du guichet, il n'est pas nécessaire de mettre en œuvre le sien non plus :

NSUInteger myCount = [myArray count];

Utilisation du codage clé-valeur (KVC)

Si l'on a besoin d'accéder au dernier objet d'un tableau par le biais de KVC, l'histoire nécessite un peu d'explication.

Tout d'abord, demander la valeur d'une clé normale à partir d'un tableau créera un nouveau tableau composé des valeurs de cette clé pour chacun des objets du tableau. . En d'autres termes, une demande de la clé lastObject d'un tableau fera en sorte que le tableau envoie valueForKey: à chacun des objets en utilisant la clé lastObject sur eux. Outre le fait que ce n'est pas le résultat escompté, il est probable qu'une exception sera levée.

Ainsi, si 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'une balise @ -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 la fonction dernier dans chacun des tableaux intérieurs.

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 préférant laisser le self -La sortie partielle peut simplement utiliser le format @"@lastObject > 5"

18voto

Krishnabhadra Points 18384
[yourArray lastObject];

voir le documentation

10voto

PeyloW Points 25312

Peut-être comme ça :

id object = [myArray lastObject];

Une bonne astuce consiste à cliquer en option sur tout symbole pour lequel vous souhaitez lire la documentation. Par exemple, maintenez la touche option enfoncée et cliquez sur le texte qui dit NSArray dans votre éditeur Xcode.

Vous obtenez une belle fenêtre contextuelle avec les éléments de base, et un lien vers une documentation complète et détaillée.

2voto

bbrame Points 2643

Ou si vous voulez être chic :

yourArray.lastObject

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X