I don't think of any good reason to define Array.get
and List.nth
this way. Given that pipeplining is very common in F#, they should have been defined so that the source
argument came last.
In case of List.nth
, it doesn't change much because you can use Seq.nth
and time complexity is still O(n)
where n
is length of the list:
[1..100] |> Seq.nth 10
It's not a good idea to use Seq.nth
on arrays because you lose random access. To keep O(1)
running time of Array.get
, you can define:
[<RequireQualifiedAccess>]
module Array =
/// Get n-th element of an array in O(1) running time
let inline nth index source = Array.get source index
In general, different argument order can be alleviated by using flip
function:
let inline flip f x y = f y x
You can use it directly on the functions above:
[1..100] |> flip List.nth 10
[|1..100|] |> flip Array.get 10
? ??
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…