私の現在のソリューションは、アレイ上with_index
、その後reduce
を実行することです。エリクサーのインデックスで減らす方法は?
5..10
|> Stream.with_index
|> Enum.reduce(0, fn(num_idx, acc) ->
{num, idx} = num_idx
acc + num * idx
end)
要素のインデックスを要素に添付してから、配列のreduceを実行する方法はありますか?
私の現在のソリューションは、アレイ上with_index
、その後reduce
を実行することです。エリクサーのインデックスで減らす方法は?
5..10
|> Stream.with_index
|> Enum.reduce(0, fn(num_idx, acc) ->
{num, idx} = num_idx
acc + num * idx
end)
要素のインデックスを要素に添付してから、配列のreduceを実行する方法はありますか?
あなたはEnum.reduce
関数は二つの引数を持たなければならないことを覚えておく必要があります。したがって、それに応じて変更を加える必要があります。あなたが何をしたか
は完全に大丈夫でした。あなたの仕様に応じて使用することもできますEnum.with_index
また、アキュムレータをタプルとして使用することもできます。その1つの要素はインデックスを表し、他の要素は結果を表します。
5..10 #Directly pattern match in argument list
|> Enum.reduce({0,0}, fn(num,{index,current_result}) ->
{index+1,current_result + num * index}
end)
あなたは、引数リスト内に直接パターンマッチを行うことができます:
5..10
|> Stream.with_index
|> Enum.reduce(0, fn({num, idx}, acc) ->
acc + num * idx
end)
別のオプションは、最初のStream.map
を経由して製品を取得し、最後にEnum.sum
を使用することです:
5..10
|> Stream.with_index
|> Stream.map(fn {num, idx} -> num * idx end)
|> Enum.sum
ああ、引数リストの中でパターンマッチングについて忘れました。 、 ありがとうございました! – domp
なぜEnum.with_index
を使わないのでしょうか?
5..10
|> Enum.with_index
|> Enum.reduce(0, fn({number, index}, acc) ->
acc + number * index
end)
.with_index
列挙をとり、そのインデックスにマッピングされた列挙の各要素にキーワードリストを返します。したがってEnum.with_index([:hi, :hello, :greetings])
は[hi: 0, hello: 1, greetings: 2]
を返します。 Elixirのキーワードリストは、タプルペアのリストであり、パターンマッチを.reduce
にするという事実を利用することができます。
あなたが試したことはまったく問題ありません。何を探していますか? – coderVishal
@coderVishalはい、私はそれが既に得ることができるほど簡単だと思います。 – domp
あなたはRubyのEnumerable.each_with_indexと同じものが欲しいのですが – cuonglm