如何在Haskell中将值列表显示为逗号分隔的字符串列表
写入文件后,我需要从最后一个列表中删除逗号。如何从列表中删除逗号如何在Haskell中将值列表显示为逗号分隔的字符串列表,haskell,Haskell,写入文件后,我需要从最后一个列表中删除逗号。如何从列表中删除逗号 Expected output [Spa"24""Meta""Outram"1[("Colin",4),("Nixon",6),("Sam",5),("Petrina",7),("Justin",5)], Spa"25""Zen"
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)]]
正如评论中所建议的,一种可能的方法是:
- 将
转换为[Spa]
,而不添加任何逗号或换行符。这将生成一个类似于[String]
[“aaa”、“bbb”、“ccc”]
- 在该列表中使用
“StPys>、\n”/Cuff>在相邻元素的中间添加分隔符。这不会将分隔符添加到末尾。您将获得类似于 [“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)]]
这不可能吗?我觉得很难理解你在这里要求什么。确切地说,你在谈论哪个列表,你想从中删除一个项目还是一个逗号?(标题上说你想删除一个项目,但你的问题是要删除一个逗号。)你的
spaStr
在每个项目的末尾添加一个逗号,在项目列表的末尾看起来很奇怪。这是你的问题吗?(你的标题完全是另一回事)如果是这样,请看一下Data.List
中的intersperse
函数,如concat$intersperse“,“[“a”、“b”、“c”]
是,因为我试图重写一个文本文件,使其除最后一个条目外都有逗号。因此,我不确定如何防止在末尾添加逗号,因为这将是一个很长的列表,因此我需要找到一种方法从最后一个条目中删除逗号,以便testdatabase可读。我所指的列表在testDatabase中。这个名称现在更有意义了吗?
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)]]