我有一个例子:
val lst1 : char list list =
[['l'; 'a'; 'n'; 'e']; ['p'; 'l'; 'a'; 'n'; 'e'; 't']; ['m'; 'o'; 'o'; 't'];
[]; []; ['s'; 'm'; 'o'; 'o'; 't'; 'h']; ['h'; 'a'; 'n'; 'g']; [];
[]; ['c'; 'h'; 'a'; 'n'; 'g'; 'e']; ['w'; 'e'; 'n'; 't']; []; []; etc.]
将此列表转换为以下内容的技巧是什么:
["lane";"planet";...]?
谢谢。
答案 0 :(得分:0)
这应该这样做,
let to_string l =
let rec loop buf = function
| [] -> Buffer.contents buf
| x :: tl -> Buffer.add_char buf x; loop buf tl
in
loop (Buffer.create 100) l
let to_str_lst l = List.map to_string l
to_string
的替代版本没有rec
-
let to_string l =
List.fold_left
(fun acc e -> Buffer.add_char acc e; acc)
(Buffer.create 100)
l
|> Buffer.contents
utop中的示例用法:
to_str_lst [['h';'e';'l';'l';'o']; ['w';'o';'r';'l';'d']];;
返回
- : string list = ["hello"; "world"]
答案 1 :(得分:0)
这是一个非常紧凑的实现:
let to_str_list =
List.map (fun cs -> String.concat "" (List.map (String.make 1) cs))
当你打电话时它看起来像这样:
# to_str_list [['h';'e';'l';'l';'o'];['w';'o';'r';'l';'d']];;
- : string list = ["hello"; "world"]
<强>更新强>
如果要在外层抑制空字符串,可以执行以下操作:
let to_str_list css =
List.map (fun cs -> String.concat "" (List.map (String.make 1) cs)) css |>
List.filter ((<>) "")
当你打电话时它看起来像这样:
# to_str_list [['h';'e';'l';'l';'o']; []; ['w';'o';'r';'l';'d']];;
- : string list = ["hello"; "world"]