我声明以下对象
List<string> list = {"Kate", "John", "Paul", "Eve", "Hugo"};
我想将“Eve”移到我的列表前面?我怎样才能做到这一点。我不能重新排序其他元素!
在输出我想得到这个
"Eve", "Kate", "John", "Paul", "Hugo"
我声明以下对象
List<string> list = {"Kate", "John", "Paul", "Eve", "Hugo"};
我想将“Eve”移到我的列表前面?我怎样才能做到这一点。我不能重新排序其他元素!
在输出我想得到这个
"Eve", "Kate", "John", "Paul", "Hugo"
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>
是访问第i
th 个元素是 O(i) 中的操作(a 中的 O(1) List
)。
您可以将其删除并插入到第一个索引。
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
.
您可以使用List.RemoveAt
(因此您不会删除所有Eve 的)和List.Insert
.
您可以使用 RemoveAt 方法从给定索引中删除 Eve,并使用 Insert 将 Eve 添加到列表的开头。
list.Remove("Eve");
list.Insert(0, "Eve");