是否有一个简洁的符号来访问数组的最后一个元素,类似于 C++ 中的 std::vector::back() ?我必须写:
veryLongArrayName.[veryLongArrayName.Length-1]
每一次?
从评论扩展
内置选项是Seq.last veryLongArrayName
,但请注意,这是 O(N) 而不是 O(1),因此对于除最小数组之外的所有数组,实际使用可能效率太低。
也就是说,自己抽象这个功能并没有什么坏处:
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
[<RequireQualifiedAccess>]
module Array =
let inline last (arr:_[]) = arr.[arr.Length - 1]
现在你可以在Array.last veryLongArrayName
没有任何开销的情况下做,同时保持代码非常惯用和可读。
我在官方文档中找不到,但 F# 4 似乎已经Array.last
实现了开箱即用:
/// Returns the last element of the array.
/// array: The input array.
val inline last : array:'T [] -> 'T
作为为 _[] 编写函数的替代方法,您还可以为 IList<'T> 编写扩展属性:
open System.Collections.Generic
[<AutoOpen>]
module IListExtensions =
type IList<'T> with
member self.Last = self.[self.Count - 1]
let lastValue = [|1; 5; 13|].Last // 13