数组最后一个元素的简明表示法

时间:2013-02-28 20:25:24

标签: arrays f#

是否有一个简洁的表示法来访问数组的最后一个元素,类似于C ++中的std :: vector :: back()?我必须写:

veryLongArrayName.[veryLongArrayName.Length-1]

每一次?

3 个答案:

答案 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

Link to implementation at github

答案 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