用于序列的 F# array_chunk [英] F# array_chunk for Sequence
本文介绍了用于序列的 F# array_chunk的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在制作序列时遇到了一些麻烦.基本上我需要将一个序列切割成一个数组序列.Seq.windowed 几乎做到了,但我不想要重复的元素.
I'm having some trouble making a sequence. Basically I need to chop a sequence into a sequence of arrays. Seq.windowed almost does it but I don't want duplicate elements.
我可以通过先将所有内容读入数组来得到我想要的东西,但我更愿意使用序列.
I can get what I want by reading everything into an array first but I'd rather use a sequence.
let array_chunk s (a:int[]) =
Array.init (a.Length / s) (fun i -> Array.sub a (i * s) s)
someSequence |> Seq.to_array |> array_chunk 5
推荐答案
这是一个很好的命令式程序,可以与 seq 一起使用并生成任意大小的数组.如果序列不是 n,最后一个会更小.
Here's a nice imperative one that'll work with seq and generate arrays of any size. The last one will be smaller if the sequence isn't even by n.
let chunk n xs = seq {
let i = ref 0
let arr = ref <| Array.create n (Unchecked.defaultof<'a>)
for x in xs do
if !i = n then
yield !arr
arr := Array.create n (Unchecked.defaultof<'a>)
i := 0
(!arr).[!i] <- x
i := !i + 1
if !i <> 0 then
yield (!arr).[0..!i-1] }
这篇关于用于序列的 F# array_chunk的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文