【发布时间】:2013-09-12 12:49:05
【问题描述】:
我正在以这种简单的图像格式 (PPM) 打印一个随机的 Ints 二维数组
0 1 0 0 1
1 0 0 1 0
0 1 1 0 0
0 1 1 1 0
0 0 0 1 0
下面是我的代码,它可以工作,但对于这样一个简单的操作来说,代码似乎太多了。有没有更好的方法来做到这一点?
import System.Random
import Data.Array.IArray
main = do
g <- newStdGen
let img = listArray ((0,0),(5,5)) ( myRands g ) :: Array (Int,Int) Int
putStrLn $ printArray img
myRands :: RandomGen g => g -> [Int]
myRands g = randomRs (0,1) g
make2dRange :: Int -> Int -> Int -> Int -> [(Int,Int)]
make2dRange x1 y1 x2 y2 = range ((x1,y1),(x2,y2))
printArray :: ( Array (Int,Int) Int ) -> String
printArray arr = unlines rows
where rows = map (unwords . map (show . (!) arr)) rowIndices
rowIndices = map ( \y -> make2dRange 0 y 5 y ) [0..5]
当然,除了显而易见的(例如,数组维度是硬编码的)
【问题讨论】:
-
您是否对 2D 数组做任何其他事情,以便您真的需要使用
Array,或者只使用列表的解决方案是否可以接受?
标签: arrays haskell printing ppm