假设我们有一个列表{a,a,a,b,b,c,c}
我们想循环遍历列表并在项值更改时进行某种更改...例如:
prevEmployer = String.empty; foreach(Person p in PersonList){ if(p.Employer != prevEmployer){ doSomething(); prevEmployer = p.Employer; } ... more code }
有没有替代方案?它看起来很狡猾.
编辑:使代码对于手头的问题更加真实.
你想要不同的价值观吗?即会有{a,a,a,b,b,a,c,c,a}吗?如果没有,你可以使用LINQ:
foreach(string s in theList.Distinct()) { doSomething(); // with s }
重新更新; 也许使用类似的东西DistinctBy
:
foreach(var item in data.DistinctBy(x=>x.Foo)) { Console.WriteLine(item.Bar); } public static IEnumerableDistinctBy ( this IEnumerable source, Func selector) { var set = new HashSet (); foreach (var item in source) { if (set.Add(selector(item))) { yield return item; } } }