我有Dictionary<int,List<Thing>>
A Thing有2个字段,Id和Level。
在每个Thing列表中,您永远不会找到具有相同Id的2件事。
字典的关键是时间而且它正在增加。 随着时间的增加,允许Thing的水平增加和减少,但该值的最后一个水平应该是它达到的最高水平。
例如2件事:
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
在此过程之后,字典现在看起来像:
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 ,
简而言之:
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 :(得分:1)
是否要从Thing
高于最后一个Level
的列表中删除所有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);
}
}