我正在尝试找到一种在haskell中将[[Int]]
转换为[(Int,Int)]
对的方法。
例如,[[1,2],[3,4]]
应该变成[(1,0),(2,(3,1),(4,1)]
我一直在用zip和list的理解来解决这个问题,但是我还没有找到任何成功。正确的方法是什么?
我正在尝试找到一种在haskell中将[[Int]]
转换为[(Int,Int)]
对的方法。
例如,[[1,2],[3,4]]
应该变成[(1,0),(2,(3,1),(4,1)]
我一直在用zip和list的理解来解决这个问题,但是我还没有找到任何成功。正确的方法是什么?
此函数将列表中每个元素的坐标值附加到元组的末尾
let zipperfun coord pairlist = map (\item->(item,coord)) pairlist
我们使用上一个函数创建仿函数,该函数输出一个元组列表列表(每个原始列表一个),其中通过应用zipperfun将每个索引压缩到其对应的元组。
let faux lst = zipWith zipperfun [0..] lst
会产生
[[((1,0),(2,0)],[(3,1),(4,1)]] 然后,我们将所有列表串联在一起。这给出了所需元组的列表。我们将它们放到flattenerfun中。
要创建以下flattenerfun:
let flattenerfun lst = concat (faux lst)
,
zipWith
函数是一个很好的起点。因此,您可能会喜欢
Prelude> zipWith (\as i -> as >>= pure . flip (,) i) [[1,2],[3,4]] [0..] >>= id
[(1,0),(2,(3,1),(4,1)]
最后一个>>= id
阶段只是连接内部列表。