Different argument order for getting N-th element of Array, List or Seq

后端 未结 3 524
野趣味
野趣味 2020-12-16 00:43

Is there a good reason for a different argument order in functions getting N-th element of Array, List or Seq:

Array.get source index
List .nth source index
         


        
3条回答
  •  心在旅途
    2020-12-16 01:35

    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:

    []
    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
    

        

提交回复
热议问题