在 Objective C 中,是否有一种方法可以一行或者简短地移除(缩短一个)并返回一个数组的第一个元素,而不考虑它的索引位置?
在 Objective C 中,是否有一行代码或者其他简短的方式可以返回一个数组的第一个元素并且将其从数组中移除,而不需要考虑它的索引位置?在 Objective C 中,是否有一种方法可以一行或者简短地移除(缩短一个)并返回一个数组的第一个元素,而不考虑它的索引位置?
在 Objective C 中,是否有一行代码或者其他简短的方式可以返回一个数组的第一个元素并且将其从数组中移除,而不需要考虑它的索引位置? 我不知道是否有一种方法可以返回被移除的项目,但是您可以使用 NSArray#objectAtIndex:0
和 NSMutableArray#removeObjectAtIndex:0
的组合来实现此操作。我想您可以在 NSMutableArray
上引入一个新的方法类别,以实现 shift
方法。
虽然帮助原始作者已经太晚了,但如果你只有一个普通的NSArray而不是NSMutableArray,那么这个方法可以很好地解决问题:
id myData = myArray.firstObject;
myArray = [myArray subarrayWithRange:NSMakeRange(1, myArray.count - 1)];
loc
值为1将超出NSArray
的范围,这时你需要抛出一个NSRangeException
异常。 - SDJMcHattieCocoa数组对象(NSArray/NSMutableArray)没有提供一行等效的方法 - 您必须先读取对象,然后再删除它。这些类提供-lastObject
和-removeLastObject
方法,但不提供-firstObject
和-removeFirstObject
方法,这应该提醒您从数组前面删除通常是一种低效的操作,因为内容必须向前移动(复制)一个位置。对于C中的数组来说,这尤其如此,因为它们与指针密切相关。
@interface NSMutableArray (QueueOneLiner)
- (id) removeAndReturnFirstObject; // Verbose, but clearer than "shift"
@end
@implementation NSMutableArray (QueueOneLiner)
- (id) removeAndReturnFirstObject {
id object = [[self objectAtIndex:0] retain];
[self removeObjectAtIndex:0];
return [object autorelease];
}
@end
obj *arr
,其中 obj
是一个类/类型名称,arr
是这个数组,你可以使用 arr+1
来获取除第一个元素外的整个数组。 [arrayName removeObjectAtIndex:0];
这可能会对你有所帮助
NSMutableArray
(而不是NSArray
)的情况。 - Stonz2