2012-05-06 21 views
4

很简单,给定F#中的序列,如何从索引n到索引n + x(包含)获取元素?所以,如果我有一个像这样的序列:{0; 1; 2; 3; 4; 5},如何获得从索引2到4的子序列?它看起来像{2; 3; 4}在fsharp序列中获取n到n + x的元素

任何使用大量内置F#API的答案是可取的。

回答

5

这样的事情?

let slice n x = Seq.skip n >> Seq.take (x+1) 

请注意,如果序列中没有足够的元素,您将得到一个InvalidOperationException

+0

完全一样的东西!我不知道我错过了“跳过”功能。谢谢! – MirroredFate

+0

将序列参数作为最后一个参数通常是一种很好的风格,所以它可以在'|>'运算符中自然使用。 – yamen

+0

好点,@yamen,我更新了。 –

2
let slice n x xs = 
    xs 
    |> Seq.windowed (x + 1) 
    |> Seq.nth n 

注意,与Yacoder的答案,它返回一个数组,而不是一个序列(可能是想你想与否,视情况而定)。

我添加了我的答案,以显示Seq.windowed,一个非常有用的功能恕我直言。 Seq.pairwise也很好,很高兴知道。