索引处的增量元素
Increment element at index
我正在研究 guide.elm-lang website on the Random example。
我正在尝试添加一个功能,向您显示您掷骰子的总次数,以及您得到每张脸的次数的一些统计数据。
为此,我将模型更改为如下所示:
type alias Model =
{
die_face : Int,
total_throws : Int,
stats: Array.Array Int
}
这就是我更新模型所做的工作:
{ model |
die_face = face,
total_throws = model.total_throws + 1,
stats = Array.set face ((Array.get face model.stats) + 1) model.stats
}
这引发了一个错误,告诉我:
This get
call produces:
#Maybe# Int
But (+) only works with #Int# and #Float# values.
指的是 Array.get
返回的不是 Int
,而是 Maybe
,因此我无法将其添加到数字 1 中。
我曾尝试使用列表来实现相同的目的,但由于它们没有索引,所以我不确定在映射它时要增加什么。我正在考虑使用记录来执行此操作并想出一种将记录键映射到 face
Int 的方法。
总的来说,我的问题是。在 elm 数组的索引 [x] 处递增元素的好方法是什么?或者,如果我只是在想这个错误,榆树的方法是什么?
Array.get
returns a Maybe
因为它必须考虑索引在数组外部的情况。解决这个问题的最简单方法是使用具有合理默认值的 Maybe.withDefault
:
Array.set face (((Array.get face model.stats) |> Maybe.withDefault 0) + 1) model.stats
虽然为此编写一个辅助函数可能是个好主意,以稍微清理代码。像这样:
incrementAt : Int -> Array Int -> Array Int
incrementAt index array =
case Array.get index array of
Just value ->
Array.set index (value + 1) array
Nothing ->
array
如果你不介意额外的依赖,你也可以使用 Array.Extra.update
。
我正在研究 guide.elm-lang website on the Random example。 我正在尝试添加一个功能,向您显示您掷骰子的总次数,以及您得到每张脸的次数的一些统计数据。
为此,我将模型更改为如下所示:
type alias Model =
{
die_face : Int,
total_throws : Int,
stats: Array.Array Int
}
这就是我更新模型所做的工作:
{ model |
die_face = face,
total_throws = model.total_throws + 1,
stats = Array.set face ((Array.get face model.stats) + 1) model.stats
}
这引发了一个错误,告诉我:
This
get
call produces:#Maybe# Int
But (+) only works with #Int# and #Float# values.
指的是 Array.get
返回的不是 Int
,而是 Maybe
,因此我无法将其添加到数字 1 中。
我曾尝试使用列表来实现相同的目的,但由于它们没有索引,所以我不确定在映射它时要增加什么。我正在考虑使用记录来执行此操作并想出一种将记录键映射到 face
Int 的方法。
总的来说,我的问题是。在 elm 数组的索引 [x] 处递增元素的好方法是什么?或者,如果我只是在想这个错误,榆树的方法是什么?
Array.get
returns a Maybe
因为它必须考虑索引在数组外部的情况。解决这个问题的最简单方法是使用具有合理默认值的 Maybe.withDefault
:
Array.set face (((Array.get face model.stats) |> Maybe.withDefault 0) + 1) model.stats
虽然为此编写一个辅助函数可能是个好主意,以稍微清理代码。像这样:
incrementAt : Int -> Array Int -> Array Int
incrementAt index array =
case Array.get index array of
Just value ->
Array.set index (value + 1) array
Nothing ->
array
如果你不介意额外的依赖,你也可以使用 Array.Extra.update
。