2013-03-18 99 views
1

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

让我解释什么,我想实现:

列表1

  1. 清单项目1
  2. 列表项2
  3. 列表项3

列表2

  1. 列表项1
  2. 列表项2

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

我也想用列表2的列表项1的克隆替换列表2的列表项2。

这里是什么,我想实现一些示例代码:

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()); 

回答

0

我也想用列表2列表项 1的克隆来替换列表2列表2项。

那么,你可以做简单的是这样的:使用的T名单将解决你RemoveAt移除的问题和插图本使用引擎盖下阵,并会揭露一些很好的功能,你

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

我想应该是这样简单。我在没有克隆功能的情况下尝试过类似于此的操作,但它不能按预期工作。谢谢。 – 2013-03-18 14:33:18

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

0

将有助于摆脱这些厌烦的方法。

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

更换// Replact的项目从一个项目到另一个项目

List of T Class