如何获取NSArray的最后一个对象

The*_*mer 42 cocoa objective-c nsarray

所以我有一个数组,其中的项目数量可能会有所不同.我想知道无论如何我能得到最后一个对象NSArray?我确实想过一个int计数器来跟踪数组中的项目数量,但这看起来太麻烦了.

有谁知道这比这更好吗?

Mon*_*olo 99

在这个问题上稍微扩展一下,有几种情况可能需要数组的最后一个对象,并有不同的方法来获取它.

直接的Cocoa计划

如果只想在标准的Cocoa程序中获取对象,那么这样做:

[myArray lastObject]
Run Code Online (Sandbox Code Playgroud)

为了解决计数器的问题 - 无需实现自己的计划:

NSUInteger myCount = [myArray count];
Run Code Online (Sandbox Code Playgroud)

使用键值编码(KVC)

如果需要通过KVC访问数组的最后一个对象,这个故事需要一些解释.

首先,从数组中请求普通键的值将创建一个新数组,该数组包含该数组中每个对象的该键的值.换句话说,对lastObject数组中的键的请求将valueForKey:使用lastObject它们上的键将数组发送到每个对象.除了不是预期的结果,它也可能会抛出异常.

因此,如果确实需要将一个密钥发送到数组本身(而不是其内容),则需要在密钥前添加一个@-sign.这告诉数组该键用于数组本身,而不是其内容.

因此,密钥必须具有该形式@lastObject,并且可以像这样使用:

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

NSNumber *number = [arr valueForKey: @"@lastObject"];
Run Code Online (Sandbox Code Playgroud)

在排序描述符中

如何在真实程序中使用此密钥的示例是需要按每个内部数组中的最后一个对象对数组数组进行排序的情况.

上面的键只用在排序描述符中:

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

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

NSArray *sorted = [arrayOfArrays sortedArrayUsingDescriptors: @[sd]];
Run Code Online (Sandbox Code Playgroud)

在谓词中

同样,为了过滤数组数组,可以直接在谓词中使用该键:

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

NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred];
Run Code Online (Sandbox Code Playgroud)

人们更喜欢离开self-part可以简单地使用格式@"@lastObject > 5"

  • 如果数组为空,则返回nil. (2认同)

Pey*_*loW 10

也许是这样的:

id object = [myArray lastObject];
Run Code Online (Sandbox Code Playgroud)

一个很好的建议是选择单击要阅读文档的任何符号.例如,按住选项键并单击NSArrayXcode编辑器中显示的任何文本.

你会得到一个很好的弹出窗口,以及完整详细文档的链接.