【问题标题】:Flattening a 2D array Haskell [duplicate]展平二维数组Haskell [重复]
【发布时间】:2016-01-11 15:37:02
【问题描述】:

我目前有一个UArray (Int, Int) Char 形式的二维数组,我想将其转换为List,如下所示:

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

每个f最初都是UArray中的一个字符。

二维数组中每一行的Chars 被转换为String,而List 又被解析为[String],但是,我没有运气toList 来自 Data.Foldable 的方法,我应该查看哪些函数来实现这一点?

感谢您的帮助!

【问题讨论】:

  • 我已经更新了我在此之前提出的问题,因此不再重复,上一个问题没有以适合我的代码的方式进行扁平化。

标签: arrays list haskell flatten


【解决方案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 实例从最小和最大界限构造的。然后,您只需获取每个索引处的元素。嵌套列表推导以非常好的方式完成了这一点。

【讨论】:

    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 2015-07-21
    • 2011-02-03
    • 2012-03-21
    • 1970-01-01
    • 2015-07-17
    • 2014-09-10
    相关资源
    最近更新 更多