2010-11-11 4 views

Répondre

11

Il n'y a pas de meilleure façon de le faire - ce que vous avez est bon.

Si vous prévoyez vraiment faire beaucoup, vous pouvez l'auteur d'une propriété d'extension F # sur le type de chaîne:

let s = "food" 

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

printfn "%c" s.Last 
0

Vous pouvez aussi le traiter comme une séquence, mais je ne suis pas sûr que ce soit plus ou moins laid que la solution que vous avez:

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

(Ceci est vieille question), quelqu'un pourrait trouver cela utile, réponse orig de 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"

1

Cela pourrait être aussi pratique:

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

Résultat:

val lastChar : char = 'g' 
Questions connexes