13

我声明以下对象

List<string> list = {"Kate", "John", "Paul", "Eve", "Hugo"};

我想将“Eve”移到我的列表前面?我怎样才能做到这一点。我不能重新排序其他元素!
在输出我想得到这个

"Eve", "Kate", "John", "Paul", "Hugo"
4

5 回答 5

18
list.Remove("Eve");  // Removes the first "Eve" element in the list
list.Insert(0, "Eve");  // Inserts "Eve" at the first position in the list

但是,如果您的列表包含多个“Eve”,则调用 Remove("Eve") 只会删除第一次出现的“Eve”。

而且您必须知道在列表开头插入元素是一项昂贵的操作。因为列表中已经存在的所有元素都必须移动。

更新

正如@AlvinWong 评论的那样,LinkedList<string>在插入元素时避免这种开销是一个非常好的解决方案。该Insert操作在 O(1) 中完成(O(ni) in a List)。的主要缺点LinkedList<string>是访问第ith 个元素是 O(i) 中的操作(a 中的 O(1) List)。

于 2013-01-31T15:03:41.187 回答
2

您可以将其删除并插入到第一个索引。

List<string> list = new List<string>(){ "Kate", "John", "Paul", "Eve", "Hugo" };
list.Remove("Eve");
list.Insert(0, "Eve");
foreach (var i in list)
{
   Console.WriteLine(i);
}

如果您知道您的具体索引"Eve",您可以使用List.RemoveAt()方法将其删除。

这是一个DEMO.

于 2013-01-31T15:04:30.623 回答
2

您可以使用List.RemoveAt(因此您不会删除所有Eve 的)和List.Insert.

于 2013-01-31T15:04:56.617 回答
0

您可以使用 RemoveAt 方法从给定索引中删除 Eve,并使用 Insert 将 Eve 添加到列表的开头。

于 2013-01-31T15:06:19.767 回答
0
list.Remove("Eve");
list.Insert(0, "Eve");
于 2013-01-31T15:07:39.163 回答