Gsp*_*van 13 f# f#-interactive
如何将字符串"Hello"拆分为字符列表,例如,如何将字符串拆分为F sharp中的字符列表.
"Hello" ->['H';'e';'l';'l';'o']
Run Code Online (Sandbox Code Playgroud)
我尝试过 Split([| |]),但它只根据你传入的参数拆分一个字符串.
我试过这个,但它仍然没有用
let splitChar (text:string) =
[for c in text ->c]
let splitChar (text:string) =
[for c in text do yield c]
Run Code Online (Sandbox Code Playgroud)
Cha*_*ert 18
您可以使用Seq.toList将字符串转换为字符列表:
Seq.toList "Hello"
Run Code Online (Sandbox Code Playgroud)
字符串是基本上字符序列,因为它实现了 IEnumerable<char>.在内部,字符串是char值的数组.该数组通过Chars索引器公开.
您可以Seq对字符串使用任何方法,例如:
"abc" |> Seq.iter (fun x->printfn "%c" x)
Run Code Online (Sandbox Code Playgroud)
个人角色也可用
您还可以使用String模块的优化函数:
"abc" |> String.iter (fun x->printfn "%c" x)
Run Code Online (Sandbox Code Playgroud)
该String模块使用String该类的方法来提高性能.例如,String.length函数是String.Length属性的别名,因此它不必迭代所有字符,如下所示Seq:
let length (str:string) =
let str = emptyIfNull str
str.Length
Run Code Online (Sandbox Code Playgroud)
其他函数,如String.iterChars直接使用索引器:
let iter (f : (char -> unit)) (str:string) =
let str = emptyIfNull str
for i = 0 to str.Length - 1 do
f str.[i]
Run Code Online (Sandbox Code Playgroud)
在.NET中,您可以使用String.ToCharArray方法。要返回 String,您可以使用String(Char[]),因为 F# 使用构造函数作为函数。
"Hello".ToCharArray() |> List.ofArray
Run Code Online (Sandbox Code Playgroud)
仅使用 F# Array 模块可能会获得更好的性能。我猜List.ofArray比 更有效率List.ofSeq。如果这并不重要,类似于 Chad 的答案,F# 惯用的方法是:
"Hello" |> List.ofSeq
Run Code Online (Sandbox Code Playgroud)
我注意到有时我最初会考虑先将某些内容拆分为 char 数组或列表 - 但我应该更简洁。
let msg = "hello-world"
let resultA =
msg.[0..0].ToUpper() + msg.[1..].Replace('-', ' ')
let resultB =
Seq.toList (msg)
|> (fun list -> (string list.Head).ToUpper() + (String.Concat(list.Tail)).Replace('-', ' '))
// val resultA : string = "Hello world"
// val resultB : string = "Hello world"
Run Code Online (Sandbox Code Playgroud)
我认为“resultA”方式更好。