haskell - 如何在 Haskell 中将值列表显示为逗号分隔的字符串列表
问题描述
在 writeFile 之后,我需要从最后一个列表中删除一个逗号。如何专门从列表中删除逗号?
Expected output
[Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)],
Spa"25""Zen""Outram"2[("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]]
Output achieved
[Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)],
Spa"25""Zen""Outram"2[("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)],]
-- turn original spa into String
spaStr :: Spa -> String
spaStr spa@(Spa rid br ar st s)
= "Spa" ++ "\""++ rid ++ "\"" ++ "\"" ++ br ++ "\""++ "\""++ ar ++ "\"" ++ show st ++ show s ++ "," ++"\n"
let newdB = ((addTspa rid br ar (read st))dB)
putStrLn $ spaStr newdB
writeFile "spa.txt" ("[" ++ spaStr newdB ++ "]")
解决方案
正如评论中所建议的,一种可能的方法是:
[Spa]
在[String]
不添加任何逗号或换行符的情况下转至。这将生成一个列表,如["aaa", "bbb", "ccc"]
- 在该列表上使用
intersperse ",\n"
可将该分隔符添加到相邻元素的中间。这不会将分隔符添加到末尾。你会得到类似的东西["aaa", ",\n", "bbb", ",\n", "ccc"]
concat
在结果上使用,得到"aaa,\nbbb,\nccc"
.- 添加最后的
[
和]
。
这是一个运行并产生您想要的输出的示例:
import Data.List (intersperse)
data Spa = Spa String String String Int [(String, Int)]
-- turn original spa into String
spaStr :: Spa -> String
spaStr spa@(Spa rid br ar st s)
= "Spa" ++ "\""++ rid ++ "\"" ++ "\"" ++ br ++ "\""++ "\""++ ar ++ "\"" ++ show st ++ show s
newDb :: [Spa]
newDb =
[ Spa "24" "Meta" "Outram" 1
[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)]
, Spa "25" "Zen" "Outram" 2
[("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]
]
main :: IO ()
main =
putStrLn $ "[" ++ concat (intersperse ",\n" $ map spaStr newDb) ++ "]"
输出:
[Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)],
Spa"25""Zen""Outram"2[("Bryan",7),("Petrina",9),("Colin",4),("Nixon",7),("Sam",5)]]
推荐阅读
- mysql - MYSQL - LOAD DATA INFILE 给出 ERROR 1045 (28000): Access denied for user '
'@' '(使用密码:是) - python - 如何使用硒滚动特定的滚动条?
- python - 如何获取大华热像仪(TPC-BF5400)的热数据?
- c# - 为什么取消 Cosmos 查询需要这么长时间?
- python - 如何制作正则表达式以从 Chess Pgn 中删除所有时间戳数据?
- javascript - JSON 数据未通过 innerHTML 显示
- asp.net-core - RDLC - 在 AspDotNet Core 项目中使用 RDLC - 本地报告处理期间发生错误。指数数组的边界之外
- python - 使用 python pandas 删除重复项并添加一些列
- javascript - 如何计算一个多边形中有多少个矩形?
- c# - 我可以使用 DIA SDK 获得类的对齐值吗?