我是功能編程和F#的新手,並且確實有很多關於如何在F#中執行此操作(從字符串中刪除特定字符)的信息,但我遇到了以下函數,並且很感謝一點點幫助,瞭解究竟發生了什麼:從字符串中剝離字符F#
let stripchars chars str =
Seq.fold
(fun (str: string) chr ->
str.Replace(chr |> Char.ToUpper |> string, "").Replace(chr |> Char.ToLower |> string, ""))
str chars
我用stripchars函數調用它的分裂功能我是這樣定義的:
let split (str : string) =
((stripchars "?,.,!,," str).Split ' ') |> Array.toList
我也很難理解,現在在函數stripchars中,當參數「chars」是傳遞,包含要從字符串str中移除的字符序列,直到最後一行「str chars」纔會在代碼中使用它。那麼這個如何工作呢?
'chars'不是函數的最後一行。它只是一個非常長的函數,所以他們把它分成幾行。它確實是'Seq.fold str chars'。因爲''這麼長時間就是爲了可讀性而完成的。把它全部放在一條線上,然後運行它來查看。 –
我現在明白了,非常感謝! –
如果你在大字符串上使用它,那麼爲每個要刪除的字符調用String.Replace兩次會很慢。如果你有一個非常大的輸入,並且有一小部分要去掉的字符,這個函數會遍歷一個小的字符列表,而大量的輸入會遍歷很多次,這正好是向後的。對於小的輸入字符串,當然,這並不重要,除非這個函數被稱爲很多。 –