F #: удалить первые N символов из строки? - PullRequest
3 голосов
/ 01 ноября 2009

Я пытаюсь написать код для удаления первых N символов в строке. Я мог бы сделать это уже обязательным образом, но я хотел бы, чтобы это было сделано в духе функционального программирования. Будучи новичком в F # и функциональном программировании, у меня возникли некоторые проблемы ...

Ответы [ 5 ]

24 голосов
/ 01 ноября 2009
"Hello world".[n..];;
3 голосов
/ 01 ноября 2009

Как показал @Jeff, вы можете сделать это в шести символах, так что это не обязательно лучший вопрос, чтобы спросить, как "сделать это в духе функционального программирования".

Я показываю другой способ, который не особенно «функционален» (поскольку он использует массивы, но, по крайней мере, он не мутирует), но, по крайней мере, показывает набор шагов.

let s = "Hello, world!"
// get array of chars
let a = s.ToCharArray()
// get sub array (start char 7, 5 long)
let a2 = Array.sub a 7 5
// make new string
let s2 = new string(a2)
printfn "-%s-" s2  // -world-
1 голос
/ 18 ноября 2009
"Hello world".Substring 3
0 голосов
/ 01 ноября 2009

Еще один способ сделать это (не особенно функциональный тоже). На самом деле он использует возможности обоих миров: мутации и лямбды:

let remove_first_n (s:string) (n:int) =
    let arr = Array.create (s.Length-n) '0'
    String.iteri (fun i c -> if i>=n then arr.[i-n] <- c else ()) s
    new string(arr)

При этом, я думаю, что лучший способ - это решение Джеффа.

Еще одна вещь, о которой следует помнить, это то, что строки являются неизменяемыми в .NET (строковое значение не может быть изменено после сборки) и что строки F # на самом деле являются .NET-строками.

0 голосов
/ 01 ноября 2009
let rec remove_first_n (str:string) (n:int) =
  match str, n with
  | _, n when n <= 0 -> str
  | "", _ -> ""
  | _ -> remove_first_n (str.Remove(0,1)) (n-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...