RemoveAt和Insert列表项的替代方法

时间:2013-03-18 12:36:01

标签: c# list

我正在寻找一种更好的数据结构或方法来简单地替换动态数组中的对象。似乎列表是选择,但是我读到并注意到RemoveAt和Insert的性能不如我所希望的那么好。

让我详细说明我想要实现的目标:

  

List1

     
      
  1. 列出项目1
  2.   
  3. 列出项目2
  4.   
  5. 列出项目3
  6.         

    列表2

         
        
    1. 列出项目1
    2.   
    3. 列出项目2
    4.   
    5.   

两个列表都使用相同的对象类型。我想用List1 [1]替换List2的空列表项 - 列表项1克隆。我使用克隆,因此复制的列表项的值是一个单独的实例。

我还想将List2的列表项2替换为List2的列表项1的克隆。

以下是我想要实现的一些示例代码:

projCraneVertices.RemoveAt(projCraneVertices.Count - 4);
projCraneVertices.Insert((projCraneVertices.Count - 3), realCraneVertices[botPoint].clone());
projCraneVertices.RemoveAt(projCraneVertices.Count - 3);
projCraneVertices.Insert((projCraneVertices.Count - 2), projCraneVertices[botPoint].clone());
projCraneVertices.RemoveAt(projCraneVertices.Count - 2);
projCraneVertices.Insert((projCraneVertices.Count - 1), realCraneVertices[topPoint].clone());
projCraneVertices.RemoveAt(projCraneVertices.Count - 1);
projCraneVertices.Insert((projCraneVertices.Count), projCraneVertices[topPoint].clone());

3 个答案:

答案 0 :(得分:0)

根据我的理解,您需要Replace方法。试试这个扩展名:

public static class Extensions
{
  public static void Replace<T>(this IList<T> list, int index, T item)
  {
    list[index] = item;
  }
}

请致电:

  List<int> ints = new List<int>() { 1, 2, 3 };
  List<int> ints2 = new List<int>() { 4, 5, 6 };
  ints.Replace(0, ints2[0]);

以上将列出第一个列表 - 4, 2, 3

答案 1 :(得分:0)

  

我还想将List2的列表项2替换为列表项的克隆   List2中的1个。

嗯,你可以这样做更简单:

proCraneVertices[2] =  realCraneVertices[1].Clone();

答案 2 :(得分:0)

使用List of T将解决你的removeAt和inset的问题,这将使用数组,并将为你揭示一些有助于摆脱这些anoing方法的好函数。

你可以使用List提供的一些功能,如下所示。

替换//将项目从一个项目替换为另一个项目

List of T Class