很簡單,給定F#中的序列,如何從索引n到索引n + x(包含)獲取元素?所以,如果我有一個像這樣的序列:{0; 1; 2; 3; 4; 5}
,如何獲得從索引2到4的子序列?它看起來像{2; 3; 4}
在fsharp序列中獲取n到n + x的元素
任何使用大量內置F#API的答案是可取的。
很簡單,給定F#中的序列,如何從索引n到索引n + x(包含)獲取元素?所以,如果我有一個像這樣的序列:{0; 1; 2; 3; 4; 5}
,如何獲得從索引2到4的子序列?它看起來像{2; 3; 4}
在fsharp序列中獲取n到n + x的元素
任何使用大量內置F#API的答案是可取的。
這樣的事情?
let slice n x = Seq.skip n >> Seq.take (x+1)
請注意,如果序列中沒有足夠的元素,您將得到一個InvalidOperationException
。
let slice n x xs =
xs
|> Seq.windowed (x + 1)
|> Seq.nth n
注意,與Yacoder的答案,它返回一個數組,而不是一個序列(可能是想你想與否,視情況而定)。
我添加了我的答案,以顯示Seq.windowed
,一個非常有用的功能恕我直言。 Seq.pairwise
也很好,很高興知道。
完全一樣的東西!我不知道我錯過了「跳過」功能。謝謝! – MirroredFate
將序列參數作爲最後一個參數通常是一種很好的風格,所以它可以在'|>'運算符中自然使用。 – yamen
好點,@yamen,我更新了。 –