C++ の std::vector::back() に似た、配列の最後の要素にアクセスするための簡潔な表記法はありますか? 私は書く必要がありますか:
veryLongArrayName.[veryLongArrayName.Length-1]
毎回?
コメントから展開
組み込みオプションは ですがSeq.last veryLongArrayName
、これは O(1) ではなく O(N) であることに注意してください。そのため、最小の配列を除くすべての場合、実際に使用するにはおそらく非効率的です。
とはいえ、この機能を自分で抽象化しても害はありません。
[<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