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

时间:2011-08-24 12:17:41

标签: objective-c cocoa nsarray

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

有人知道这比这更好吗?

4 个答案:

答案 0 :(得分:98)

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

直接的Cocoa程序

如果一个人只想在标准的Cocoa程序中获取对象,那么就可以了:

[myArray lastObject]

要解决计数器的问题 - 无需实施自己的计划:

NSUInteger myCount = [myArray count];

使用键值编码(KVC)

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

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

因此,如果确实需要向数组本身发送密钥(而不是其内容),则需要在密钥前加上@ - 符号。这告诉数组该键用于数组本身,而不是其内容。

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

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

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

在排序描述符

如何在真实程序中使用此密钥的示例是需要通过每个内部数组中的 last 对象对数组数组进行排序。

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

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: @"self.@lastObject > 5"];

NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred];

人们更愿意退出self - 部分,只需使用格式@"@lastObject > 5"

答案 1 :(得分:18)

[yourArray lastObject];

请参阅documentation

答案 2 :(得分:10)

也许是这样的:

id object = [myArray lastObject];

一个好的建议是选择 - 点击你想要阅读文档的任何符号。例如,按住选项键并单击Xco​​de编辑器中显示NSArray的任何文本。

您可以获得一个很好的弹出窗口,其中包含完整详细文档的链接。

答案 3 :(得分:2)

或者如果你想得到幻想:

yourArray.lastObject