当前位置: 首页 > 编程语言 > C#

C#List-分组-WithoutLinqShare

时间:2023-04-10 14:43:58 C#

C#List-Grouping-WithoutLinq2.0框架...这就是没有Linq的原因。这是我所拥有的:ListofObjects=List;foreach(对象中的var对象){varobjectToAdd=newObject(object);varoa=ListofObjects.Find(x=>x.Account==objectToAdd.Account);如果(oa==null){ListofObjects.Add(objectToAdd);}else{ListofObjects.Remove(oa);oa.Amount=objectToAdd.Amount;ListofObjects.Add(oa);最简单的答案:使用LINQBridge并获取.NET2.0和所有LINQtoObjects优点...如果您可以使用C#3(即VS2008,但目标是.NET2.0),效果最好。如果你真的做不到这一点,你基本上需要保留一个从键到值列表的字典。遍历序列,检查它是否已经包含列表——如果没有,添加一个。然后添加到您找到的任何列表(无论是新的还是旧的)。如果您需要按密钥顺序返回组,您还需要按照找到密钥的顺序保留一个密钥列表。坦率地说,这很痛苦……只是获取LINQBridge?(说真的,LINQ的每一部分实际上都很容易编写-但也很容易产生一个一个的错误,或者在它实际上是一个ICollection的情况下最终忘记为Count()之类的东西优化ICollection...无需在这里重新发明轮子。)编辑:我正要写一些代码,但后来我注意到你想要一个列表返回......什么是列表?列表>?还是真的想一次性分组总结?如果是这样,您不想要一个键和数量对的列表吗?或者您是否要重新使用您已经为一个帐户获得的相同类,但作为一个集合?如果是后者,这里有一些示例代码:publicstaticIListSumAccounts(IEnumerabledata){Listret=newList();词典地图=新词典();foreach(varitemindata){IObjectexisting;if(!map.TryGetValue(item.Account,outexisting)){existing=newIObject(item.Account,0m);地图[item.Account]=现有的;ret.Add(现有);}existing.Amount+=item.Amount;返回ret;不可否认,由于使用字典进行查找,除非您拥有相当多的帐户,否则这里的额外效率将毫无意义......编辑:如果您的评论中的帐户数量较少,您可以使用:publicstaticIListSumAccounts(IEnumerable数据){Listret=newList();foreach(varitemindata){IObjectexisting=ret.Find(x=>x.Account==item.Account);if(existing==null){existing=newIObject(item.Account,0m);ret.Add(现有);}existing.Amount+=item.Amount;返回ret;}使用字典来保存结果。在字典中查找项目接近于O(1)操作,因此它比在列表中搜索项目快得多。以上就是C#学习教程:C#列表-分组-没有Linq分享的全部内容,如果对大家有用还需要进一步了解C#学习教程,希望大家多多关注—Dictionarysum=new字典();foreach(IObjectobjinobjects){if(sum.ContainsKey(obj.Account)){sum[obj.Account].Amount+=obj.Amount;}else{sum.Add(obj.Account,obj.Amount);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: