我的程序定期收到一个项目列表,让我们让他们成为水果。因此,第一个列表可能是这样的:跟踪列表老化
[apple, pear, banana]
一两个名单:
[pear, banana, plum, mandarin]
[banana, plum, apple]
我要的是一个数据结构,具有在最近列表中的所有项目和多少个连续的次每个项目都出现了。这里的最终状态应该是:
[banana:3, plum:2, apple:1]
因为香蕉已经存在,在过去三个列表,梅刚过去两个苹果是一个新的条目(尽管我们看到它在不久前的事实,我们忘了因为它上次没有)。
最显而易见的方法(和我们的软件做它的方式)是:
foreach(Fruit f in oldList){
f.old = true;
}
foreach(Fruit newF in newList){
foreach(Fruit oldF in oldList){
if(newF == oldF){
oldF.old = false;
oldF.count++;
}
}
}
// iterate through oldList to remove all old entries
oldList.Remove((x) => x.old);
但是,这是一个很大的循环,并正在成为一个瓶颈的程序处理更多的数据。这可以更有效地完成吗?