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

C#学习教程:.NET一次迭代IEnumerable中的多个元素分享

时间:2023-04-10 12:38:09 C#

.NET一次迭代IEnumerable中的多个元素给定一个集合,我需要一次迭代三个(或其他数字)所有元素。例如:string[]exampleData={"John","Doe","1.1.1990","Jane","Roe","2.2.1980"}for(inti=0;iChunksOf(thisIEnumerablesequence,intsize){Listchunk=newList(size);foreach(序列中的T元素){chunk.Add(element);if(chunk.Count==size){yieldreturnchunk;块=新列表(大小);你可以这样使用它:foreach(IListchunkinexampleData.ChunksOf(3)){CreateUser(foreName:chunk[0],surName:chunk[1],dateOfBirth:chunk[2]);请注意,如果sequence.Count()不是大小的整数倍,ChunksOf会丢弃最后一个部分块。如果要返回部分块,可以在末尾添加:if(chunk.Count>0)yieldreturnchunk;.此代码片段将您的数组分组为3个元素的集合,然后为每个集合创建一个用户。exampleData.Select((elem,index)=>new{elem,index}).GroupBy(x=>x.index/3).Select(x=>CreateUser(x.ElementAt(0).elem,x.ElementAt(1).elem,x.ElementAt(2).elem);当然,您需要确保数组的长度是3的倍数。虽然我更喜欢Michael的方法,但如果您需要特定于字段的解析(例如DOB解析),您可能更喜欢更具体的方法。publicstaticIEnumerableExtractUsers(IEnumerableinput){inti=0;字符串名字;字符串姓氏;字符串出生日期;foreach(输入中的当前字符串){switch(i){case0:one=forename;姓;休息;案例2:三=出生日期;我=-1;//不好,这将在底部递增yieldreturnCreateUser(forename,surname,dateofbirth);休息;我++;Take()和Skip()会做你想做的事,但我建议你避免使用这样的数组。您最好创建一个具有FirstName、LastName和DateOfBirth属性的Person类,并保留它们的数组。如何忘记foreach、花哨的linq东西、临时子列表等,并回到根??在迭代中调用.GetEnumerator()和调用.MoveNext()三次。这是枚举的核心。以前的答案对我来说似乎过于复杂。它既简单又硬核:-)。您可以使用LINQstring[]exampleData={"John","Doe","1.1.1990","Jane","Roe","2.2.1980"};int块大小=3;varseqences=fromseqIndexinEnumerable.Range(0,exampleData.Length)groupexampleData[seqIndex]byseqIndex/chunkSize;foreach(varsubinsequences){CreateUser(sub.ToList()[0],sub.ToList()[1],sub.ToList()[2]);}编辑:varsequences=fromminEnumerable.Range(0,exampleData.Count())groupexampleData.ToList()[m]bym/chunkSize;或者以上就是C#学习教程:.NET一次迭代IEnumerable中几个元素共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——intchunkSize=3;varsequences=Enumerable.Range(0,exampleData.Count()).GroupBy(m=>m/chunkSize,m=>exampleData.ToList()[m]);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: