繁体   English   中英

OCAML 中将字符列表列表转换为字符字符串列表

[英]Convert a char list list into a char string list in OCAML

我有一个例子:

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";...]?

谢谢你。

这个应该可以

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

没有recto_string替代版本 -

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"]

这是一个非常紧凑的实现:

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"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM