F# – 如何在循环Seq中对previous,this和next元素进行分组

在F#中如何最好地转换有限序列式seq [0; 1; 2; 3; 4]像seq [4,0,1; 0,1,2; 1,2,3; 2,3,4; 3,4,0]?

加成:
我的Seq代表循环数据.在这种情况下,闭合折线的顶点.我需要相邻元素来计算每个角的角度.

最佳答案
我会这样做:

let neighbors xs =
  match Array.ofSeq xs with
  | [||] -> [||]
  | [|x|] -> [|x, x, x|]
  | xs ->
      let n = xs.Length
      [|yield xs.[n-1], xs.[0], xs.[1]
        for i=1 to n-2 do
          yield xs.[i-1], xs.[i], xs.[i+1]
        yield xs.[n-2], xs.[n-1], xs.[0]|]

比较通常比模数整数运算快得多.为了加快速度,预先分配数组并填充元素而不是使用序列表达式.

转载注明原文:F# – 如何在循环Seq中对previous,this和next元素进行分组 - 代码日志