一个数组如何拆分为n个元素的集合?在C#4中将数组分组到n个元素数组列表中的最佳方法是什么?例如string[]testArray={"s1","s2","s3","s4","s5","s6","s7","s8"};如果我们取n=3,它应该被划分。字符串[]A1={"s1","s2","s3"};字符串[]A2={"s4","s5","s6"};字符串[]A3={"s7","s8"};是否有使用LINQ的简单方法?这将生成一个包含3个元素的字符串数组:inti=0;varquery=fromsintestArrayletnum=i++groupsbynum/3intogselectg.ToArray();varresults=query.ToArray();我不认为有一个很好的内置方法,但你可以写一个像下面这样的方法。publicstaticIEnumerable>GroupInto(thisIEnumerablesource,intcount){使用(vare=source.GetEnumerator()){while(e.MoveNext()){yieldreturnGroupIntoHelper(e,count);}}}privatestaticIEnumerableGroupIntoHelper(IEnumeratore,intcount){do{yieldreturne.Current;数数-;}while(count>0&&e.MoveNext());}整数大小=3;varresults=testArray.Select((x,i)=>new{Key=i/size,Value=x}).GroupBy(x=>x.Key,x=>x.Value,(k,g)=>g.ToArray()).ToArray();如果您不介意将结果作为IEnumerable>而不是T[][]提供,那么您可以完全省略ToArray调用:intsize=3;varresults=testArray.Select((x,i)=>new{Key=i/size,Value=x}).GroupBy(x=>x.Key,x=>x.Value);如果它实际上是您使用的数组而不是一般的IEnumerables,特别是如果数组非常大,那么此方法是一种非常快速且内存效率高的方法。如果你真的只是想要一个LINQ语句,那就再也不要了。privatestaticT[][]SliceArray(T[]source,intmaxResultElements){intnumberOfArrays=source.Length/maxResultElements;if(maxResultElements*numberOfArrays您可以使用此扩展程序publicstaticclassExtension{privatestaticIEnumerableSplit(thisTListvalue,intcountOfEachPart)whereTList:IEnumerable{intcnt=value.Count()/countOfEachPart;List>result=newList>();for(inti=0;inewPart=value.Skip(i*countOfEachPart).Take(countOfEachPart).ToArray();if(newPart.Any())result.Add(newPart);否则中断;}返回结果k.Key,v=>v.Value));返回结果;}publicstaticIEnumerable>Split(thisIListvalue,intcountOfEachPart){returnvalue.Split,T>(countOfEachPart);}publicstaticIEnumerableSplit(thisT[]值,intcountOfEachPart){r返回值.Split(countOfEachPart);}publicstaticIEnumerable>Split(thisIEnumerablevalue,intcountOfEachPart){returnvalue.Split,T>(countOfEachPart);MoreLinq提供了Batch扩展方法。成一组n个元素?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
