因此,我有一个数组,其中的项目数量可能会有所不同.我想知道是否还有其他方法可以得到NSArray
的最后一个对象?我确实想过使用int
计数器来追踪数组中的物品数量,但这似乎太麻烦了.
有人知道比这更好吗?
因此,我有一个数组,其中的项目数量可能会有所不同.我想知道是否还有其他方法可以得到NSArray
的最后一个对象?我确实想过使用int
计数器来追踪数组中的物品数量,但这似乎太麻烦了.
有人知道比这更好吗?
对这个问题进行一点扩展,在几种情况下,人们可能需要数组的最后一个对象,以及获取它的不同方法.
如果只想在标准Cocoa程序中获取对象,那么这将实现:
[myArray lastObject]
为了解决柜台的问题,无需自行实施:
NSUInteger myCount = [myArray count];
如果需要通过KVC访问数组的最后一个对象,那么这个故事需要一些解释.
首先,从数组will create a new array consisting of the values of that key for each of the objects in the array请求普通密钥的值.换句话说,从数组请求密钥lastObject
将使数组使用密钥lastObject
向每个对象发送valueForKey:
.除了不是预期的结果,它还可能引发异常.
因此,如果一个人真的需要向数组本身发送一个键(与其内容相反),那么这个键需要在前面加上@
号.这会告诉数组,该键用于数组本身,而不是其内容.
因此,密钥必须具有表单@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"
格式