移动列表中的元素

时间:2013-01-31 15:02:20

标签: c# .net list data-structures

我声明了以下对象

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

我想在我的名单前面移动“夏娃”?我怎样才能做到这一点。我不能重新排序其他元素!
在输出中我想得到这个

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

5 个答案:

答案 0 :(得分:17)

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)(List中的O(n-i))中完成。 LinkedList<string>的主要缺点是访问i元素是O(i)中的一个操作(List中的O(1))。

答案 1 :(得分: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

答案 2 :(得分:2)

您可以使用List.RemoveAt(这样就不会删除所有 Eve)和List.Insert

答案 3 :(得分:0)

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

答案 4 :(得分:0)

list.Remove("Eve");
list.Insert(0, "Eve");