C#, ロジック
- RemoveAtのパフォーマンス
List.RemoveAt のヘルプには以下のようにあります。
「このメソッドは O(n) 操作です。ここで、n は (Count - index) です。」
これすなわち、後ろから消して行けってことでしょうか。前から後ろからという議論は置いといて、リストの中のインデックスを指定しているのに、何故に検索をかける必要があるのか不思議でしょうがない。チェーンリストでしょうから、削除後に穴を詰めるなどということもないでしょうし。実際、コード1とコード2では格段にパフォーマンスの差が出ます。
// コード1(10秒ぐらいかかる)
List<int> list = new List<int>();
for( int i = 0; i < 100000; i++ )
{
list.Add( i );
}
while( list.Count > 0 )
{
list.RemoveAt( 0 );
}
// コード2(一瞬で終わる)
List<int> list = new List<int>();
for( int i = 0; i < 100000; i++ )
{
list.Add( i );
}
while( list.Count > 0 )
{
list.RemoveAt( list.Count - 1 );
}