2017-03-14 9 views
0

Ich brauche ein wenig Hilfe. Ich habe 2 Listen in meinem Projekt: 1 hat 5.000 Artikel, listA, und der andere hat 10.000 Artikel, listB. Ich lese die Liste mit einem for loop:löschen Element in einer Liste C#

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

Ich brauche das letzte Element in listA und in listB zu löschen, muss ich die letzten 2 Artikel löschen. Dieser Prozess ist notwendig, da ich den Speicher in meiner Software optimieren muss.

ich wirklich zu schätzen jede Hilfe Dank

Ich habe versucht, dies zu tun, aber es funktioniert nicht:

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

Wahrscheinlich meintest du '9999 - (i + 1)' oder '9999 - i - 1'. –

+1

Wenn Sie nur Elemente aus Ihrer Liste entfernen, warum müssen Sie sie iterieren? – Dec

+0

BTW, Sie lesen gerade ein zu wenig Items - Sie brauchen 'j> = 0' für eine Rückwärtsschleife –

Antwort

3

Um das letzte Element lösche

listA.RemoveAt(listA.Count - 1) 

Für die letzte zwei Elemente führen sie einfach zweimal aus. Sie sollten überprüfen, ob die Anzahl bereits 0 ist, sonst erhalten Sie eine Ausnahme.

0

Da j in listA den Index des letzten Elements immer gleich scheint, ist 2 * j + 1 in listB den Index des letzten Elements immer gleich. So konnte man nur RemoveAt/RemoveRange verwenden:

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

Auch, wenn die Speicherverwaltung ein großes Anliegen ist, wollen Sie vielleicht prüfen Sie Ihre Liste nach einer gewissen Zeit schrumpft durch die Capacity Einstellung (beachten Sie, dass diese Auswirkungen auf die Leistung haben kann, so dass Sie sollte dies zu eifrig vermeiden).

listA.Capacity = j; 
listB.Capacity = 2 * j; 
Verwandte Themen