如何将字符串拆分为F sharp中的字符列表

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)

  • 这是因为字符串已经是一系列字符.没有必要使用`Seq.toList`来处理单个字符 (3认同)

Pan*_*vos 7

字符串是基本上字符序列,因为它实现了 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)


Cam*_*art 6

在.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)


Tom*_*Ell 5

我注意到有时我最初会考虑先将某些内容拆分为 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”方式更好。