如何实现一个对象[]作为顶级对象始终是最新的?

时间:2012-12-31 00:53:13

标签: c# arrays xna

我正在编写一个应用程序,我希望实现一个对象数组,它会定期添加一个新项目。

我总是想知道添加的最后一个对象是哪个,并且正在考虑将该对象放在位置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万件物品

我想我将探索队列堆栈选项

再次感谢;

3 个答案:

答案 0 :(得分:5)

  

我总是想知道添加的最后一个对象是哪个   考虑将该物体放在位置0处。(因此推动每个物品   将一个指数下调至最多130个项目)
  ...
  现在本身就相当简单,我想知道是否存在   是其他任何方式来执行此操作。

是的,有一种更简单的方法可以通过使用已构建的Queue(第一输入优先输出)结构来执行此操作。您主要需要三种方法:

  • Enqueue()将一个对象添加到队列的末尾。

  • Dequeue()返回队列开头 删除的对象。

  • Peek()返回队列 开头的对象而不删除它

答案 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");