我有以下字符串列表:
["1,AA,3","4,BB,6","7,CC,9"]
Run Code Online (Sandbox Code Playgroud)
我想得到像元组列表:
[(1,AA,3),(4,BB,6),(7,CC,9)]
Run Code Online (Sandbox Code Playgroud)
请帮忙.谢谢
编辑:
我尝试过类似的东西:
tuples (x:xs) = do
foo ++ splitOn "," x
tuples xs
return foo
Run Code Online (Sandbox Code Playgroud)
这可能会给我列表如下:
"1,AA,3,4,BB,6,7,CC,9"
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将它转变为元组.
AA,BB,CC应该是字符串.
另外我想如果在列表中将是这样的:
["1,AA,3","4,,6","7,CC,9"]
Run Code Online (Sandbox Code Playgroud)
转变为
[(1,"AA",3),(4,6),(7,"CC",9)]
Run Code Online (Sandbox Code Playgroud)
import Data.List.Split -- https://hackage.haskell.org/package/split
arrayToThreeTuple :: [String] -> [(Int,String,Int)]
arrayToThreeTuple = map (toThreeTuple.splitOn ",")
where
toThreeTuple :: [String] -> (Int, String, Int)
toThreeTuple [a, b, c] = (read a :: Int, b, read c)
toThreeTuple _ = undefined
Run Code Online (Sandbox Code Playgroud)
一点解释:在给定的子串上splitOn拆分String,例如
GHCI List.Split> splitOn "," "1,AA,3"
["1","AA","3"]
Run Code Online (Sandbox Code Playgroud)
接下来read将a String转换为不同的类型,可以写入read "1" :: Int或ghc可以通过类型签名推断它(请参阅参考资料read c).
下一行是"catch all line",它缓存所有其他模式[a,b,c],表示_并导致运行时错误(undefined).
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |