私は重複を含むリストを持っています。私は、リスト内の各項目のインスタンス数を数えたいと思います。私の計画されました:エリクシール:リストを減らしてカウントの出現をマップする(別の引数でマップ・キーに一致するパターン)
list
|> Enum.reduce(%{}, fn
item, %{item => count}=acc -> %{acc | item => count + 1}
item, acc -> Map.put(acc, item, 1)
end)
しかし、これはエラーillegal use of variable item inside map key match, maps can only match on existing variable by using ^item
でコンパイルに失敗します。
最初のパターンをitem, %{^item => count}=acc
に変更しました。その時点で、エラーはunbound variable ^item
になりました。
ここで何をすべきかわかりません。私はそれが別のものに基づいて1つの引数に一致するパターンを作ることが可能であることを知っています(比較関数の1つのヘッドについてfn a, a -> true
のように)。私はガードでそれをやってみたが、Map.has_key?/2
はガードに入れられない。私は一般的に地図上でのマッチングについて多くの質問を見つけましたが、一致する値が別の引数から来た場合はそうしないでください。
何らかの理由であなたは 'Map.update/4'を使用しませんでしたか? 'list |> Enum.reduce(%{}、fn x、acc - > Map.update(acc、x、1、&(&1 + 1))end)'となります。 – Dogbert
...私は明らかに私が持っていると思ったようにドキュメントを読まなかったので、明らかに。私はそれを受け入れることができるように答えてください。 –