在获取数组、列表或序列的第 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# 中很常见,它们应该被定义为 source
争论最后出现。
如果是 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
一般来说,可以通过使用
flip
来缓解不同的参数顺序。功能:let inline flip f x y = f y x
你可以直接在上面的函数上使用它:
[1..100] |> flip List.nth 10
[|1..100|] |> flip Array.get 10
关于f# - 获取数组、列表或序列的第 N 个元素的不同参数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184949/