删除字典中直到结尾的值

时间:2016-04-21 13:14:51

标签: c# dictionary

我有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

1 个答案:

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