所以我有一个数组,项目数量可能会有所不同。我想知道无论如何我能得到NSArray
的最后一个对象?我确实想过有一个int
计数器来跟踪数组中的项目数量,但这看起来太麻烦了。
有人知道这比这更好吗?
答案 0 :(得分:98)
在问题上稍微扩展一下,有几种情况可能需要数组的最后一个对象,并有不同的方法来获取它。
如果一个人只想在标准的Cocoa程序中获取对象,那么就可以了:
[myArray lastObject]
要解决计数器的问题 - 无需实施自己的计划:
NSUInteger myCount = [myArray count];
如果需要通过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];
答案 2 :(得分:10)
也许是这样的:
id object = [myArray lastObject];
一个好的建议是选择 - 点击你想要阅读文档的任何符号。例如,按住选项键并单击Xcode编辑器中显示NSArray
的任何文本。
您可以获得一个很好的弹出窗口,其中包含完整详细文档的链接。
答案 3 :(得分:2)
或者如果你想得到幻想:
yourArray.lastObject