2015-10-13 58 views
1

我现在有形式UArray (Int, Int) Char的2D阵列,我想变成List此像这样:压扁的2D阵列的Haskell

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

每个f是最初在UArray一个字符。

Char S为2D阵列中的每一行变成一个String,其又被解析成一个List作为这样[String],但是,我曾与toList方法没有运气从Data.Foldable,什么功能我应该看着实现这一目标吗?

感谢您的帮助!

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