f# – 获取Array,List或Seq的第N个元素的不同参数顺序

前端之家收集整理的这篇文章主要介绍了f# – 获取Array,List或Seq的第N个元素的不同参数顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
函数中获得不同参数顺序的好理由是获取Array,List或Seq的第N个元素:
  1. Array.get source index
  2. List .nth source index
  3. Seq .nth index source

我想使用管道运算符,似乎只有Seq:

  1. s |> Seq.nth n

有没有办法使用与Array或List相同的符号?

我不认为有任何好的理由以这种方式定义Array.get和List.nth.由于在F#中,pipeplining是非常常见的,所以它们应该被定义为源参数是最后的.

在List.nth的情况下,它不会改变太多,因为您可以使用Seq.nth,时间复杂度仍然是O(n),其中n是列表的长度:

  1. [1..100] |> Seq.nth 10

在数组上使用Seq.nth并不是一个好主意,因为您丢失了随机访问.要保持O(1)运行Array.get的时间,可以定义:

  1. [<RequireQualifiedAccess>]
  2. module Array =
  3. /// Get n-th element of an array in O(1) running time
  4. let inline nth index source = Array.get source index

一般来说,使用翻转功能可以减轻不同的参数顺序:

  1. let inline flip f x y = f y x

您可以直接使用它上面的功能

  1. [1..100] |> flip List.nth 10
  2. [|1..100|] |> flip Array.get 10

猜你在找的设计模式相关文章