F#:从字符串中删除前N个字符?

时间:2009-11-01 03:06:04

标签: string f#

我正在尝试编写一些代码来删除字符串中的前N个字符。我本可以以强制性的方式完成这项任务,但我希望看到它以函数式编程的精神完成。作为F#和函数式编程的新手,我遇到了一些麻烦......

5 个答案:

答案 0 :(得分:24)

"Hello world".[n..];;

答案 1 :(得分:3)

正如@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-

答案 2 :(得分:1)

"Hello world".Substring 3

答案 3 :(得分:0)

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)

答案 4 :(得分:0)

另一种方法(也没有特别的功能)。实际上它使用了两个世界的特征:变异和lambda:

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)

话虽这么说,我认为最好的方法是Jeff的解决方案。

要记住的另一件事是,字符串在.NET中是不可变的(一旦构建就不能修改字符串值),并且F#字符串实际上是.NET字符串。