我具有此功能,该功能首先读取某些文件的内容,然后将文件的内容制成列表中的单独字符串。然后,我想访问列表中的每个元素,并在\ n出现时拆分字符串并将其反转。但是,我无法完成最后一部分。当遇到\ n时,如何拆分字符串列表中的每个字符串,然后反转内容?
一个例子。如果我有一个说“ aaa \ nbbb \ n”的文件,另一个说“ ccc \ nddd \ n”的文件,我想在\ n处分割字符串,使字符串说“ ddd \ nccc \ nbbb \ naaa \ n”
现在,下面的代码输出为“ ccc \ nddd \ naaa \ nbbb \ n”
let tac (filenames:string list) : string option =
let bal = List.map (fun x -> readFile(x)) filenames
let mutable ral = []
for elem in bal do
let wal = [elem.Value]
ral <- ral @ wal
let sal = List.choose id ral |> List.rev |> String.concat """"""
try
Some(sal)
with
| _ -> None
为了能够运行您的代码,我对其进行了一些简化,因此我只有:
let bal = ["aa\nbb"; "cc\ndd"]
let mutable ral = []
for elem in bal do
let wal = [elem]
ral <- ral @ wal
let sal = bal |> List.rev |> String.concat ""
看来您的代码也在option
某种程度上使用了值,但这与该问题无关。我也""""""
用更简单的替换""
。在原始代码中,您还具有:
try Some(sal) with _ -> None
这是没有必要的,因为Some(sal)
永远不会抛出异常。现在,在上面显示的代码中,您有了一个for
循环,然后使用List.rev
。该for
循环再造只是相同的列表,所以在此不做太大的意义。您可以更改循环以反转列表并放置List.rev
,也可以放置List.rev
。我会做前者:
let bal = ["aa\nbb"; "cc\ndd"]
let sal = bal |> List.rev |> String.concat ""
这将获取字符串列表,将其反转,然后以相反的顺序连接字符串。您还想反转每个字符串。为此,您可以将字符串中的字符取反,然后将它们转换为字符串并将它们连接起来:
"abc" |> Seq.rev |> Seq.map string |> String.concat ""
要对原始列表中的所有字符串执行此操作,可以使用List.map
:
let sal =
bal
|> List.map (fun s ->
s |> Seq.rev |> Seq.map string |> String.concat "")
|> List.rev |> String.concat ""
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句