1

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

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

清单 1

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

清单2

  1. 清单项目 1
  2. 清单项目 2
  3. 空值

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

我还想用 List2 的列表项 1 的克隆替换 List2 的列表项 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());
4

3 回答 3

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

于 2013-03-18T12:39:53.587 回答
0

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

好吧,你可以像这样更简单:

proCraneVertices[2] =  realCraneVertices[1].Clone();
于 2013-03-18T12:42:02.213 回答
0

使用 List of T 将解决您的 removeAt 问题,并且 inset 这在引擎盖下使用 Array 并将向您展示一些有助于摆脱这些 anoing 方法的好功能。

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

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

T级列表

于 2013-03-18T13:54:13.637 回答