2017-03-14 11 views
0

少し助けが必要です。プロジェクトに2つのリストがあります:1つは5,000個のアイテム、listA、もう1つは10,000アイテム、listBです。私はfor loopを使用してリストを読んでいます:リスト内のアイテムを削除するC#

for(int j = 5000 - 1; j > 0; j--) 

私はlistAで最後の項目を削除する必要があり、かつlistBで、私は最後の2つの項目を削除する必要があります。私のソフトウェアでメモリを最適化する必要があるため、このプロセスが必要です。

私は本当に私はこれを実行しようとしましたが、それは動作しませんおかげ

任意の助けに感謝:

listA.RemoveAt(j); 
listB.RemoveAt(9999 - i + 1); 
listB.RemoveAt(9999 - i); 
+0

おそらく '9999 - (i + 1)'または '9999 - i - 1'を意味します。 –

+1

リストから項目を削除しているだけの場合、なぜそれらを反復する必要がありますか? – Dec

+0

btw、あなたは現在、あまりにも少数のアイテムしか読んでいません - 逆ループでは 'j> = 0'が必要です –

答えて

3

最後の項目を削除するには、最後のために

listA.RemoveAt(listA.Count - 1) 

を行うと2つの項目は単純に2回実行されます。あなたはカウントが既に0であるかどうかを確認する必要があります。そうしないと、例外が発生します。

0

listAjは常に最後の項目のインデックスと同じように見えるので、2 * j + 1は常にlistBの最後の項目のインデックスと同じです。だから、あなただけRemoveAt/RemoveRangeを使用することができます。

また
listA.RemoveAt(j); 
listB.RemoveRange(2 * j, 2); 

、メモリ管理はあなたがCapacityを設定することで、しばらくして、あなたのリストを縮小検討する必要があります大きな問題である場合(これはあなたのように、パフォーマンスへの影響を持つことができることに注意してくださいこれをあまりにも熱心にやってはいけません)。

listA.Capacity = j; 
listB.Capacity = 2 * j; 
関連する問題