我目前有一个UArray (Int, Int) Char
形式的2D数组,我想把它变成List
,如下所示:
["ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff"]
每个f
最初都是UArray中的一个角色。
将2D数组中每一行的Char
转换为String
,然后将List
解析为[String]
toList
,我对Data.Foldable
的{{1}}方法没有运气,我应该考虑哪些功能来实现这一目标?
感谢您的帮助!
答案 0 :(得分:1)
对于任何索引元组,任何数组类型和任何元素类型,您可以相当多地概括此功能:
import Data.Array.Unboxed
flatten2D :: (Enum i0, Enum i1, Ix i0, Ix i1, IArray arr x)
=> arr (i0, i1) x -> [[x]]
flatten2D arr = [ [ arr ! (i0, i1) | i0 <- [min0..max0] ] | i1 <- [min1..max1] ]
where ((min0, min1), (max0, max1)) = bounds arr
实现很简单:索引列表是使用Enum
实例从最小和最大边界构造的。然后你只需在每个索引处获取元素。嵌套列表理解以非常好的方式实现了这一点。