Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除和插入列表项的替代方法_C#_List - Fatal编程技术网

C# 删除和插入列表项的替代方法

C# 删除和插入列表项的替代方法,c#,list,C#,List,我正在寻找一种更好的数据结构或方法来简单地替换动态数组中的对象。似乎选择列表,但是我读到并注意到RemoveAt和Insert的性能并没有我希望的那么好 让我详细说明我正在努力实现的目标: projCraneVertices.RemoveAt(projCraneVertices.Count - 4); projCraneVertices.Insert((projCraneVertices.Count - 3), realCraneVertices[botPoint].clone()); proj

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

让我详细说明我正在努力实现的目标:

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());
清单1

  • 清单项目1
  • 清单项目2
  • 清单项目3
  • 清单2

  • 清单项目1
  • 清单项目2
  • 空的
  • 两个列表使用相同的对象类型。我想用List1[1]——列表项1克隆替换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());
    

    据我所知,您需要一个
    Replace
    方法。请尝试此扩展:

    public static class Extensions
    {
      public static void Replace<T>(this IList<T> list, int index, T item)
      {
        list[index] = item;
      }
    }
    
    公共静态类扩展
    {
    公共静态void Replace(此IList列表、int索引、T项)
    {
    列表[索引]=项目;
    }
    }
    
    比如:

      List<int> ints = new List<int>() { 1, 2, 3 };
      List<int> ints2 = new List<int>() { 4, 5, 6 };
      ints.Replace(0, ints2[0]);
    
    List ints=newlist(){1,2,3};
    List ints2=new List(){4,5,6};
    整数替换(0,整数2[0]);
    
    上面将列出第一个列表-
    4、2、3

    我还想用列表项的克隆替换列表项2的列表项2 清单2的第1部分

    好吧,你可以这样做:

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

    使用T列表将解决移除和插入的问题这使用了引擎盖下的数组,并将向您展示一些好的功能,这将有助于避免这些插入方法

    您可以使用下面列表提供的一些函数

    替换//将项目从一个项目重新映射到另一个项目


    我觉得应该这么简单。我以前在没有克隆功能的情况下尝试过类似的方法,但效果并不理想。非常感谢。