【问题标题】:Join array of strings?加入字符串数组?
【发布时间】:2018-10-01 07:32:30
【问题描述】:

在 JavaScript 中你可以加入一个字符串数组,例如:

fruits = ["orange", "apple", "banana"];
joined = fruits.join(", ");

console.log(joined)

// "orange, apple, banana"

你如何在 ReasonML 中做到这一点?

【问题讨论】:

  • 问题有什么问题?
  • @glennsl 这个问题被问到并回答了几乎所有关于 SO 的语言。很遗憾没有人愿意为 ReasonML 回答这个问题。我做了一些研究,不,对于新手来说,你的任何解决方案都是可行的,这并不明显。多么热情的社区。​​span>
  • @glennsl stackoverflow 对开发人员有用的原因是它几乎可以回答任何问题。对于许多语言,stackoverflow 比文档更容易找到解决方案。只是我的意见。
  • native 或 bucklescript 的答案可能不同,应该在问题中指定。你能对你得到的答案提供一些反馈吗?

标签: reason


【解决方案1】:

你可以使用Js.Array.joinWith:

let fruits = [|"orange", "apple", "banana"|];
let joined = Js.Array.joinWith(", ", fruits);
Js.log(joined);
// "orange, apple, banana"

【讨论】:

  • 不鼓励使用Js.Array.join,因为它编译为JS array.join(),它使用逗号作为分隔符。
  • 正确,我从答案中删除了对Js.Array.join 的引用。
【解决方案2】:

将数组转换为连接值的字符串听起来像是 Array.fold_left 的工作,但是正在运行

Array.fold_left((a, b) => a ++ "," ++ b, "", fruits);

生产“,orange,apple,banana”。

理想情况下,折叠的起始值(第二个参数)应该是数组中的第一个元素,而实际使用的数组是其余元素,这样可以避免初始逗号。不幸的是,这对于数组来说并不容易,但对于列表来说:

let fruitList = Array.to_list(fruits);
let joined = List.fold_left((a, b) => a ++ "," ++ b, List.hd(fruitList), List.tl(fruitList));
/*joined = "orange,apple,banana"*/

Reasonml docs on lists

【讨论】:

    【解决方案3】:

    下面是如何在 ReasonML 中实现自己的 join 函数:

    let rec join = (char: string, list: list(string)): string => {
      switch(list) {
      | [] => raise(Failure("Passed an empty list"))
      | [tail] => tail
      | [head, ...tail] => head ++ char ++ join(char, tail)
      };
    };
    

    有了这个,Js.log(join("$", ["a", "b", "c"])) 给你"a$b$c",就像 JavaScript 一样。

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 2017-02-03
      • 1970-01-01
      • 2013-06-07
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 2010-09-08
      相关资源
      最近更新 更多