list - 如何为 Grid (2d List) 类型制作 indexedMap 函数?

标签 list function dictionary elm

提供的 List 类型有一个 indexedMap 函数:( http://package.elm-lang.org/packages/elm-lang/core/2.0.0/List#indexedMap )

indexedMap : (Int -> a -> b) -> List a -> List b
Same as map but the function is also applied to the index of each element (starting at zero).

indexedMap (,) ["Tom","Sue","Bob"] == [ (0,"Tom"), (1,"Sue"), (2,"Bob") ]

我创建了一个 Grid 类型,其定义为 type alias Grid a = List (List a)

我想为这个 Grid 类型创建一个类似的 indexedMap 函数,签名为 indexedMap : ((Int, Int) -> a -> b ) -> Grid a -> Grid b,但我不知道该怎么做。

最佳答案

你必须使用 List.indexedMap 两次:

indexedMap f grid =
  List.indexedMap
    (\outer list -> List.indexedMap (\inner item -> f (outer,inner) item) list)
    grid

第一个 List.indexedMap 处理“外部列表”,第二个 List.indexedMap 处理“内部列表”,其中 outerinner 分别指代这两个列表中的索引。

如果你更喜欢无点风格,也可以使用

indexedMap f = 
  List.indexedMap
    (\outer -> List.indexedMap (\inner -> f (outer,inner)))

关于list - 如何为 Grid (2d List) 类型制作 indexedMap 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29795184/

相关文章:

python - 检查两个有序列表的匹配

Python String 到列表处理

c# - 使用 Linq 从列表中过滤列表

JavaScript 不确定代码做什么

javascript - 如何使用 JavaScript 访问字典中的本地对象?

python - 如何将空格和逗号分隔的数字字符串转换为 int 列表?

matlab - 如何确定一个函数是否被调用后跟一个分号 (";")?

c# - 将字典绑定(bind)到转发器 asp.net 时出现错误

r - 如何使用字典在r中构造另一个变量?

delphi - 如何获取delphi函数中参数传递的变量或对象节点的名称?