开发者

better way to get the last character in a string in f#

开发者 https://www.devze.com 2023-01-24 09:29 出处:网络
I want the last character from a string I\'ve got str.[str.Length - 1], but that\'s ugly. Ther开发者_JS百科e must be a better way.There\'s no better way to do it - what you have is fine.

I want the last character from a string

I've got str.[str.Length - 1], but that's ugly. Ther开发者_JS百科e must be a better way.


There's no better way to do it - what you have is fine.

If you really plan to do it a lot, you can author an F# extension property on the string type:

let s = "food"

type System.String with
    member this.Last =
        this.Chars(this.Length-1)  // may raise an exception

printfn "%c" s.Last 


This could be also handy:

let s = "I am string"
let lastChar = s |> Seq.last

Result:

val lastChar : char = 'g'


(This is old question), someone might find this useful, orig answer from Brian.

type System.String with

    member this.Last() =
        if this.Length > 1 then 
            this.Chars(this.Length - 1).ToString()
        else 
            this.[0].ToString()
    member this.Last(n:int)  =
        let absn = Math.Abs(n)
        if this.Length > absn then
            let nn = 
                let a = if absn = 0 then 1 else absn
                let b = this.Length - a
                if b < 0 then 0 else b
            this.Chars(nn).ToString()
        else 
            this.[0].ToString()

"ABCD".Last() -> "D"

"ABCD".Last(1) -> "D"

"ABCD".Last(-1) -> "D"

"ABCD".Last(2) -> "C"


You could also treat it as a sequence, but I'm not sure if that's any more or less ugly than the solution you have:

Seq.nth (Seq.length str - 1) str
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号