次のオブジェクトを宣言します
List<string> list = {"Kate", "John", "Paul", "Eve", "Hugo"};
リストの前に「イブ」を移動したいですか?どうやってやるの。他の要素を並べ替えてはいけません!
出力でこれを取得したい
"Eve", "Kate", "John", "Paul", "Hugo"
次のオブジェクトを宣言します
List<string> list = {"Kate", "John", "Paul", "Eve", "Hugo"};
リストの前に「イブ」を移動したいですか?どうやってやるの。他の要素を並べ替えてはいけません!
出力でこれを取得したい
"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
ただし、リストに複数の「イブ」が含まれている場合、Remove( "Eve")を呼び出すと、最初に出現する「イブ」のみが削除されます。
また、リストの先頭に要素を挿入するのはコストのかかる操作であることを知っておく必要があります。すでにリストにあるすべての要素をシフトする必要があるためです。
@AlvinWongがコメントしLinkedList<string>
たように、要素を挿入するときにこのオーバーヘッドを回避するための非常に優れたソリューションです。Insert
操作はO(1)で行われます(aのO(ni))List
。の主な欠点はLinkedList<string>
、th要素へのアクセスがi
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
を削除しないように)とを使用できます。List.Insert
RemoveAtメソッドを使用して、指定されたインデックスからEveを削除し、Insertを使用してリストの先頭にEveを追加できます。
list.Remove("Eve");
list.Insert(0, "Eve");