加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 00:47:53 所属栏目:百科 来源:网络整理
导读:在函数中获得不同参数顺序的好理由是获取Array,List或Seq的第N个元素: Array.get source indexList .nth source indexSeq .nth index source 我想使用管道运算符,似乎只有Seq: s | Seq.nth n 有没有办法使用与Array或List相同的符号? 我不认为有任何好的
在函数中获得不同参数顺序的好理由是获取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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读