3

我正在努力实现以下目标。输入是列表 [8;9;4;5;7],输出应该是 "8,9,4,5,7," 注意输出中的 ","

我尝试了以下

let rec ConvertToString list =
   match list with
   | head :: tail -> head.ToString() + ConvertToString tail
   | [] -> ""

let op= [8;9;4;5;7] |> ConvertToString

但我得到的输出是 val me : string = "89457"

任何人都可以建议如何在输出中获得“,”。函数应该是通用的。

4

3 回答 3

7

您需要在头部和转换后的尾部之间添加逗号,并且需要另一种情况来转换最后一个元素,这样您就不会添加分隔逗号。

let rec ConvertToString list =
   match list with
   | [l] -> l.ToString()
   | head :: tail -> head.ToString() + "," + ConvertToString tail
   | [] -> ""

请注意,您还可以使用以下方法定义您的函数String.concat

let ConvertToString l = l |> List.map (fun i -> i.ToString()) |> String.concat ","

String.Join

let ConvertToString (l: 'a seq) = System.String.Join(",", l)

如果您只想允许ConvertToString接受int list参数,则可以显式指定输入参数的类型:

let ConvertToString (l : int list) = ...
于 2013-10-19T18:07:56.247 回答
4

我认为这是整数列表的一个不错的版本:

let convertToString = List.map (sprintf "%i") >> String.concat ","

或者如果你想要一个通用版本:

let convertToString l = l |> List.map (sprintf "%A") |> String.concat ","
于 2013-10-23T13:35:57.417 回答
0

只是另一种方法:

let ConvertToString (l: int list) =
match l with
| [] -> ""
| h :: t -> List.fold (fun acc x -> acc + "," + x.ToString()) (h.ToString()) t
于 2013-10-20T17:32:29.527 回答