我试图用对象填充数组直到指定的计数,当达到计数时,我不会将对象添加到数组中,我能够做到这一点。
但是我想要的是假设我已经给了第7个,并且&对象被添加到数组中,所以当我想要添加第8个对象时,应该推出对象和索引0,并且所有对象都应该采用它们的新位置来为新对象腾出空间。
所以朋友们怎么做呢
从下面的评论我试过这段代码
if(count ==7)
{
[array1 removelastObject] ;
}
[array1 insertObject:orderGroup atIndex:0 ] ;
它有效......
非常感谢你的朋友..
此致 兰吉特
答案 0 :(得分:3)
-(id)popAndPush:(id)newObject{
id poppedObject = nil;
if([array count]==maxCount){ /// remove first object (new count will be maxCount-1
poppedObject = [[array removeObjectAtIndex:0] retain];
}
[array addObject:newObject]; /// push new object
return [poppedObject autorelease];
}
答案 1 :(得分:3)
听起来你想要的是一个循环缓冲区。通过数组实现的队列通常以这种方式实现 - 唯一的区别是队列调整大小,听起来你想要在它满了时出队,所以你保留了最新的X个项目。当你添加&删除项目,你不想要改变所有顺序n - 相反,你只需要重新定义正面和背面的内容。
循环缓冲区是使用一定大小的数组实现的,你有两个索引变量 - head和tail。您还为项目计数维护一个变量。
从正面删除项目时,删除该项目并增加头部索引器。向后添加项目时,可以增加尾部索引器并添加。在这两种情况下,当你增加时,它可以环绕。您可以进行检查 - 如果索引位于最后一个单元格,设置为0,或者您可以使用模数运算。 index = index%[数组计数]。
答案 2 :(得分:0)
array
是NSMutableArray
[array removeObjectAtIndex:0]; // All of your other objects will move down an index
[array addObject:myNewObject]; // This will be added to the end of your array