展平二维数组 Haskell

Flattening a 2D array Haskell

我目前有一个 UArray (Int, Int) Char 形式的二维数组,我想将它变成 List,如下所示:

["ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff",
"ffffffffff"]

每个f本来就是UArray中的一个字符

其中二维数组中每一行的 Char 被转换为 String,后者又被解析为 List 这样的 [String] , 但是,我没有运气使用 Data.Foldable 中的 toList 方法,我应该查看哪些函数来实现这个?

感谢您的帮助!

对于任何索引元组、任何数组类型和任何元素类型,您可以相当多地概括此功能:

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 实例从最小和最大边界构造的。然后你只需在每个索引处获取元素。嵌套列表理解以一种非常好的方式实现了这一点。