Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String F#:是否从字符串中删除前N个字符?_String_F# - Fatal编程技术网

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

String F#:是否从字符串中删除前N个字符?,string,f#,String,F#,我正试图编写一些代码来删除字符串中的前N个字符。我本来可以用命令式的方式来做这件事,但我希望看到它是本着函数式编程的精神来做的。作为F#和函数式编程的新手,我遇到了一些麻烦…正如@Jeff所展示的,你可以用六个字符来完成这项工作,因此这不一定是了解如何“本着函数式编程的精神”的最佳问题 "Hello world".[n..];; 我展示了另一种方法,它不是特别“实用”(因为它使用数组,但至少它不会改变任何数组),但至少展示了一组步骤 let s = "Hello, world!" // get

我正试图编写一些代码来删除字符串中的前N个字符。我本来可以用命令式的方式来做这件事,但我希望看到它是本着函数式编程的精神来做的。作为F#和函数式编程的新手,我遇到了一些麻烦…

正如@Jeff所展示的,你可以用六个字符来完成这项工作,因此这不一定是了解如何“本着函数式编程的精神”的最佳问题

"Hello world".[n..];;
我展示了另一种方法,它不是特别“实用”(因为它使用数组,但至少它不会改变任何数组),但至少展示了一组步骤

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-
让rec先删除(str:string)(n:int)=
将str,n与
|当n str
| "", _ -> ""
|首先移除(str.remove(0,1))(n-1)
另一种方法(也不是特别实用)。事实上,它使用了两个世界的特征:突变和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)
让我们先删除(s:string)(n:int)=
设arr=Array.create(s.Length-n)'0'

String.iteri(fun i c->if i>=n然后arr.[i-n]应该注意,您不能从现有字符串实例中删除字符,因为F#String是不可变的。您只能创建一个没有这些字符的新字符串实例。“因为F#String是不可变的”不是100%准确。F#用于所有.NET应用程序的System.String类型是不可变的。唯一支持的可变字符串类型是System.Text命名空间中的StringBuilder。感谢大家的帮助+1显示了典型的递归函数结构,但-2为O(1)问题提供了O(n)解决方案。我的意思是O(n^2)对O(N)。
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)
"Hello world".Substring 3