我正在编写一个应用程序,我希望实现一个对象数组,它会定期添加一个新项目。
我总是想知道添加的最后一个对象是哪个,并且正在考虑将该对象放在位置0.(从而将每个项目按下一个索引到最多130个项目)
使用
列表很容易实现items.Insert(0,new item());
items.RemoveAt(130);
然后将自动按下每个项目并在130处移除该项目但是这对于数组而言并非如此简单
我最初想到的地方
for(int i = 129; i>0;i--)
{
items[i] = items[i-1];
}
items[0] = new item();
这允许我简单地访问最新项目(通过索引[0]),并按创建顺序(1 - > 129);
现在本身就相当简单,我想知道是否有其他方法可以执行此操作。
编辑:感谢您的快速回复,
我对此进行了一些测试(使用了100万次迭代) 似乎队列方法在这里是最快的,但只是轻微的 然后是清单 然后数组花费了大约50%的时间来处理100万件物品
我想我将探索队列堆栈选项
再次感谢;
答案 0 :(得分:5)
我总是想知道添加的最后一个对象是哪个 考虑将该物体放在位置0处。(因此推动每个物品 将一个指数下调至最多130个项目)
...
现在本身就相当简单,我想知道是否存在 是其他任何方式来执行此操作。
是的,有一种更简单的方法可以通过使用已构建的Queue(第一输入优先输出)结构来执行此操作。您主要需要三种方法:
答案 1 :(得分:0)
你的循环是不必要的,Array.Insert会为你“向下移动”元素。
但是如果你真的想在开始时总是添加新的元素,那么出于性能原因,LinkedList会更好,因为无论你在哪里插入一个元素,它都不需要移动元素。
答案 2 :(得分:-1)
我认为这就像你能做到的一样简单。我个人认为它是一种通用的扩展方法。
public static void Insert<T>(this T[] array, int position, T item)
{
for ( int i = array.Length-1; i > position; i-- )
array[i] = array[i-1];
array[position] = item;
}
所以你可以像
一样使用它string[] lolCats = { "ceiling cat", "invisible bike cat", "lime cat" };
lolCats.Insert(0, "monorailcat");