私は(友人からの助けを借りて)List
,Int
を要素に適用する関数を作成します指定されたインデックスMap
と似ていますが、すべての要素に関数を適用するのではなく、1つの要素にのみ適用します。指定されたインデックスでList要素を変更する方法
は、だから私の質問は以下のとおりです。
- この機能は、すでにどこか心に存在していますか?私たちはそれを見つけることができませんでした。
- そうでない場合は、これを達成するより良い方法がありますか?
ここでは、コードです:あなたはそれをやってみたかった場合はそれにもかかわらず、これは一つの方法ですElm discourages indexing Lists, as they are linked lists under the hood: to retrieve the 1001th element, you have to first visit all 1000 previous elements.:
import Html exposing (text)
main =
let
m = {arr=[1,5,3], msg=""}
in
text (toString (getDisplay m 4 (\x -> x + 5)))
type alias Model =
{ arr : List (Int)
, msg : String
}
getDisplay : Model -> Int -> (Int -> Int) -> Model
getDisplay model i f =
let
m = (changeAt model.arr i f)
in
case m of
Ok val ->
{model | arr = val, msg = ""}
Err err ->
{model | arr = [], msg = err}
changeAt : List a -> Int -> (a -> a) -> Result String (List a)
changeAt l i func =
let
f j x = if j==i then func x else x
in
if i < (List.length l) && i >= 0 then
Ok(List.indexedMap f l)
else
Err "Bad index"
NOTE。