日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何通过 Linq 将集合拆成多个块?

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何通过 Linq 将集合拆成多个块? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • BlakeH

請問是否可以用 linq 按序生成帶有多個固定 size 的塊?我的理想情況下還可以對這些 塊 進行操作。

回答區

  • Sergey Berezovskiy

說實話,你不需要寫任何代碼,使用 MoreLINQ 中的批次方法即可,它可以按序拆解到固定大小的桶中,你可以直接在 Nuget 上安裝 MoreLINQ 包。

int?size?=?10; var?batches?=?sequence.Batch(size);

如果你好奇它的實現方法,可參考如下源碼:

public?static?IEnumerable<IEnumerable<TSource>>?Batch<TSource>(this?IEnumerable<TSource>?source,?int?size) {TSource[]?bucket?=?null;var?count?=?0;foreach?(var?item?in?source){if?(bucket?==?null)bucket?=?new?TSource[size];bucket[count++]?=?item;if?(count?!=?size)continue;yield?return?bucket;bucket?=?null;count?=?0;}if?(bucket?!=?null?&&?count?>?0)yield?return?bucket.Take(count).ToArray(); }
  • dana

這個需求確實比較常見,在 .NET6 中添加了一個 Enumerable.Chunk() 擴展方法,然后你就可以像下面這樣使用。

var?list?=?new?List<int>?{?1,?2,?3,?4,?5,?6,?7?};var?chunks?=?list.Chunk(3); //?returns?{?{?1,?2,?3?},?{?4,?5,?6?},?{?7?}?}

如果你對源碼感興趣,可以參考如下:

public?static?IEnumerable<TSource[]>?Chunk<TSource>(this?IEnumerable<TSource>?source,?int?size) {if?(source?==?null){ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);}if?(size?<?1){ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.size);}return?ChunkIterator(source,?size); }private?static?IEnumerable<TSource[]>?ChunkIterator<TSource>(IEnumerable<TSource>?source,?int?size) {using?IEnumerator<TSource>?e?=?source.GetEnumerator();while?(e.MoveNext()){TSource[]?array?=?new?TSource[size];array[0]?=?e.Current;int?i;for?(i?=?1;?i?<?array.Length;?i++){if?(!e.MoveNext()){break;}array[i]?=?e.Current;}if?(i?==?array.Length){yield?return?array;continue;}Array.Resize(ref?array,?i);yield?return?array;break;} }

點評區

發現 .NET6 下的 Enumerable 增加了一些 By 系列方法:MinBy,ExceptBy,IntersectBy,又有得學了。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的如何通过 Linq 将集合拆成多个块?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。