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