лучший способ получить последний символ в строке в F # - PullRequest
5 голосов
/ 11 ноября 2010

Я хочу последний символ из строки

У меня есть str.[str.Length - 1], но это ужасно. Должен быть лучший способ.

Ответы [ 4 ]

12 голосов
/ 11 ноября 2010

Нет лучшего способа сделать это - то, что у вас есть, хорошо.

Если вы действительно планируете делать это много, вы можете создать свойство расширения F # для строкового типа:

let s = "food"

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

printfn "%c" s.Last 
3 голосов
/ 29 ноября 2017

Это также может быть удобно:

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

Результат:

val lastChar : char = 'g'
3 голосов
/ 10 октября 2014

(Это старый вопрос), кто-то может найти этот полезный, оригинальный ответ от Брайана.

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 голос
/ 12 ноября 2010

Вы также можете рассматривать это как последовательность, но я не уверен, что это более или менее безобразно, чем у вашего решения:

Seq.nth (Seq.length str - 1) str
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...