C#, ロジック


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 );
} 
		
	


inserted by FC2 system