Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何用长生不老药中的指数做降低?_Elixir - Fatal编程技术网

Elixir 如何用长生不老药中的指数做降低?

Elixir 如何用长生不老药中的指数做降低?,elixir,Elixir,我当前的解决方案是使用_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函数必须有两个参数。因此,您需要做出相应的更改 你做的很好。根据

我当前的解决方案是使用_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

或者,您可以使用累加器作为元组,其中一个元素表示索引,另一个元素表示结果

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

为什么不使用带有索引的枚举

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是的,我想它已经很简单了。听起来您想要的东西与Enumerable相同。每个\u都有\u索引Ruby@cuonglm对但后来我意识到,即使在Ruby中,你仍然不能用_indexah来减少_,没错,我忘记了参数列表中的模式匹配,谢谢!