是否有一个简洁的表示法来访问数组的最后一个元素,类似于C ++中的std :: vector :: back()?我必须写:
veryLongArrayName.[veryLongArrayName.Length-1]
每一次?
答案 0 :(得分:10)
从评论
扩展内置选项是Seq.last veryLongArrayName
,但请注意这是O(N)而不是O(1),因此除了最小的数组之外的所有数组都可能实际使用效率太低。
也就是说,自己抽象这个功能没有任何害处:
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
[<RequireQualifiedAccess>]
module Array =
let inline last (arr:_[]) = arr.[arr.Length - 1]
现在你可以在没有任何开销的情况下做Array.last veryLongArrayName
,同时保持代码非常惯用和可读。
答案 1 :(得分:7)
我在官方文件中找不到它,但F#4似乎开箱即用Array.last
:
/// Returns the last element of the array.
/// array: The input array.
val inline last : array:'T [] -> 'T
答案 2 :(得分:6)
作为为_ []编写函数的替代方法,您还可以为IList&lt;'T&gt;写一个扩展属性:
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