2016-04-21 10 views
0

im Wörterbuch unteren bis zum Ende sind Ich habe ein Dictionary<int,List<Thing>>Entfernen Werte, die

A Thing 2 Felder hat, eine ID und eine Stufe.

In jeder Ding-Liste finden Sie nie 2 Dinge mit der gleichen ID.

Der Schlüssel des Wörterbuchs ist Zeit und es nimmt zu. Mit steigender Zeit kann der Wert einer Sache erhöht oder verringert werden, aber die letzte Stufe für diesen Wert sollte die höchste Ebene sein, die erreicht wurde.

Zum Beispiel mit 2 Dinge:

T=1,LV=3,LV=4 
T=2,LV=4,LV=4 
T=3,LV=4,LV=4 
T=4,LV=3,LV=2 
T=5,Lv=2,LV=4 
T=6,LV=3,LV=3 
T=7  ,LV=3 

Nach diesem Prozess nun das Wörterbuch aussehen wird:

T=1,LV=3,LV=4 
T=2,LV=4,LV=4 
T=3,LV=4,LV=4 
T=4, ,LV=2 
T=5, ,LV=4 
T=6, , 
T=7  , 

Auf den Punkt gebracht:

ThingIds = GetAllThingIds() 
foreach thingId in thingIds 
Find highest level of thing 
from lastSecond to firstSecond 
let thingAtSecond = secondThings[thingId]; 
if thingAtSecond.Level == highestLevel then break; 
else remove this thing at this second 
+0

Noch nicht klar. Möchten Sie die Liste ändern, indem Sie alle 'Thing' entfernen, die' LV' sind höher als die 'LV' der nächsten Sache? –

+0

@TimSchmelter Ja genau, wir modifizieren nur die Liste, werden sie nie los. – jmasterx

+0

Also, was willst du? Löschen Sie diese "ungültige" Sache, so dass immer die letzte die höchste ist? –

Antwort

1

Möchten Sie entfernen möchten Alle aus der Liste, die Level ist höher als letzte Sache Level?

foreach (List<Thing> things in ThingIds.Values) // loop dictionary values, only the lists are relevant 
{ 
    if (things.Count < 2) 
     continue; // cannot contain invalid "things" 
    Thing lastThing = things[things.Count - 1]; 
    for (int i = things.Count - 2; i >= 0; i--) // backwards loop to remove via index 
    { 
     Thing t = things[i]; 
     if (t.Level > lastThing.Level) 
      things.RemoveAt(i); 
    } 
} 
+0

Dies ist nicht für die Tatsache, dass Dinge können schwanken Ebene in der Mitte der Liste, aber danke trotzdem :) (ex: 4,4,4,4,2,4 ist ein legaler Endzustand) – jmasterx

+0

@jmasterx: was sollte mit dieser illegalen Liste happen: '4,4,4,4,2,3 '. Sollte es danach '2,3' enthalten? –

+0

4,4,4,4,2,3 => 4,4,4,4 – jmasterx

Verwandte Themen