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

使用LINQShare拆分数组

时间:2023-04-11 11:22:53 C#

使用LINQ拆分数组我有一个这样的一维集合:[1,2,4,5.....n]Transformthiscollectioninacollection:[[1,2,3],[4,5,6],...]基本上我想根据需要分组或拆分,数组是“n”个成员我可以用foreach语句来完成,但是我目前正在学习LINQ,所以我不想遍历所有元素并手动创建一个新数组,而是想使用LINQ函数(如果适用)是否有LINQ函数可以帮助我解决这个问题?我正在考虑GroupBy或SelectMany我不知道他们是否会帮助我,但他们可能会非常感激=):**您可以像这样按索引除以批大小进行分组:varbatchSize=3;varbatched=orig.Select((Value,Index)=>new{Value,Index}).GroupBy(p=>p.Index/batchSize).Select(g=>g.Select(p=>p.Value).ToList());使用MoreLinq.Batchvarresult=inputArray.Batch(n);//n->批量大小示例varinputs=Enumerable.Range(1,10);varoutput=inputs.Batch(3);varoutputAsArray=inputs.Batch(3).Select(x=>x.ToArray()).ToArray();//如果需要作为数组,则需要Take()和Skip()。这些方法允许您拆分IEnumerable。然后您可以使用Concat()再次将它们拼接在一起。下面的示例将数组拆分为4项一组。int[]items=Enumerable.Range(1,20).ToArray();//生成一个测试数组来拆分int[][]groupedItems=items.Select((item,index)=>index%4==0?items.Skip(index).Take(4).ToArray():null).Where(group=>group!=null).ToArray();它不是纯粹的LINQ,但它与它一起使用:publicstaticclassMyEnumerableExtensions{publicstaticIEnumerableSplit(thisIEnumerablesource,intsize){if(source==null){thrownewArgumentNullException("sourcecan'tbe无效的。”);}if(size==0){thrownewArgumentOutOfRangeException("Chunksizecan'tbe0.");}列表结果=新列表(大小);foreach(Txinsource){result.Add(x);if(result.Count==size){yieldreturnresult.ToArray();结果=新列表(大小);}}}}它可以在你的代码中使用:privatevoidTest(){//这是你的原始序列IEnumerableseq=new[]{1,2,3,4,5,6};//这是拆分成一定长度块的结果//(这里的块长度等于3)。//你可以用这个操作进一步排序,//像过滤或连接等varsplitted=seq.Split(3);很简单:以上就是C#学习教程:使用LINQ拆分数组分享的全部内容,如果对大家有用还需要了解更多关于C#学习教程,希望大家多多关注——静态类LinqExtensions{publicstaticIEnumerable>ToPages(thisIEnumerableelements,intpageSize){if(elements==null)thrownewArgumentNullException("elements");如果(pageSizei++/pageSize);返回分页;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: