2012-05-06 23 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也很好,很高興知道。