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

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

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

s |> Seq.nth n

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

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

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

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

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

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

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

let inline flip f x y = f y x

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

[1..100] |> flip List.nth 10
[|1..100|] |> flip Array.get 10
原文链接:https://www.f2er.com/javaschema/281842.html

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