我需要过滤列表,删除所有项目的语言代码与之前的项目相同(项目按时间排序)。这样,我想检测所有过境点。
有没有办法用一行linq做到这一点?
var test = new List<Sample> { new Sample("AT", "test1"),
new Sample("AT", "test2") ,
new Sample("AT", "test3") ,
new Sample("DE", "test4") ,
new Sample("DE", "test5") ,
new Sample("DE", "test6") ,
new Sample("AT", "test7") ,
new Sample("AT", "test8") ,
new Sample("AT", "test9")
};
var borderChanges = new List<Sample>();
var lastCountry = "";
foreach (var sample in test)
{
if (sample.country != lastCountry)
{
lastCountry = sample.country;
borderChanges.Add(sample);
}
}
答案 0 :(得分:7)
我认为这就是你在寻找的东西:
test.Where((x,idx) => idx == 0 || x.Country != test[idx - 1].Country));
答案 1 :(得分:0)
在foreach
迭代中,无法访问序列的相邻元素。也许您的目标可以通过IEnumerable<T>
的{{3}}扩展方法来实现,您可以在其中比较序列的相邻元素。