将整数列表转换为字符串

时间:2013-10-19 18:01:52

标签: f#

我正在努力实现以下目标。输入是列表[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”

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

3 个答案:

答案 0 :(得分: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) = ...

答案 1 :(得分:3)

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

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

或者如果您想要通用版本:

let convertToString l = l |> List.map (sprintf "%A") |> String.concat ","

答案 2 :(得分:0)

另一种方法:

let ConvertToString (l: int list) =
match l with
| [] -> ""
| h :: t -> List.fold (fun acc x -> acc + "," + x.ToString()) (h.ToString()) t