我正在努力实现以下目标。输入是列表[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”
任何人都可以建议如何在输出中获得“,”。该功能应该是通用的。
答案 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