更好的方法来获取f#中字符串中的最后一个字符

时间:2010-11-11 18:23:31

标签: string f#

我想要字符串中的最后一个字符

我有str.[str.Length - 1],但那很难看。必须有更好的方法。

4 个答案:

答案 0 :(得分:12)

没有更好的方法 - 你拥有的很好。

如果您真的打算这么做,可以在字符串类型上创建一个F#扩展属性:

let s = "food"

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

printfn "%c" s.Last 

答案 1 :(得分:3)

(这是一个老问题),有人可能会从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() - &gt; “d”

“ABCD”。最后(1) - &gt; “d”

“ABCD”。最后(-1) - &gt; “d”

“ABCD”。最后(2) - &gt; “C”

答案 2 :(得分:3)

这也很方便:

(function(start, x, z){
    for (var i=0; i<z; i++){
      if (x === undefined){}
    }
    console.info('t1 ', Date.now() - start);
    start = Date.now();
    for (var i=0; i<z; i++){
      if (x === void 0){}
    }
    console.info('t1 ', Date.now() - start);
})(Date.now(), '', 1e6)

结果:

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

答案 3 :(得分:1)

您也可以将其视为一个序列,但我不确定这是否比您所拥有的解决方案更难或更难:

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