2

如何从List<T>C# 中删除对象并返回删除的对象?

RemoveAt会破坏对象吗?我是否需要先制作对象的深层副本然后调用RemoveAt

4

3 回答 3

11

RemoveAt 不会破坏对象并且不需要深拷贝。

var result = list[i];
list.RemoveAt(i);
return result;

RemoveAt是 O( n - i ) vs Removewhich is O( n ) (其中n是长度,i是要删除的元素的索引)。删除一个元素后,您必须将其后的所有内容向下移动一个。

根据此文档,如果您想要删除元素的最高效方式,请将其与 last, element 交换,然后将其删除。这不会像上面那样保持顺序。从理论上讲,这意味着删除列表的最后一个元素是 O(1)。

var result = list[i];
list[i] = list[list.Length-1];
list.RemoveAt(list.Length-1);
return result;
于 2013-08-09T08:35:47.970 回答
7

你可以这样做:

var listObject = list.ElementAt(index);

list.Remove(listObject);
于 2013-08-09T08:34:27.480 回答
-3

我很抱歉我误解了这个问题。

这是我的回答,你应该使用函数。

public xxxx sss(List s,var i)
{
  try
{
var result = s.ElementAt(i);
s.Remove(result);
}
catch(Exception e)
{
Console.WriteLine(e.message);
}
}
于 2013-08-09T08:44:46.773 回答