【发布时间】:2016-09-19 04:40:39
【问题描述】:
我是 Julia 新手,正在学习使用 Map、reduce、filter。 我越来越难以理解它如何替代 for 和 while 循环。 对于下面的代码,我想替换 for 循环
function addMultiplesOf3And5(N::Int)
sumOfMultiples = 0
if(N == 3)
return sumOfMultiples + N
end
for i = 3:N-1
if(i % 3 == 0 && i % 5 == 0)
continue
elseif(i % 3 == 0)
sumOfMultiples += i
elseif(i % 5 == 0)
sumOfMultiples += i
end
end
return sumOfMultiples
end
非常感谢您的帮助。
更新: 这是我通过教程后所做的
function addMultiplesOf3And5(N::Int)
array = range(1,N-1)
return reduce(+, map(x -> multiples_of_3_Or_5(x), array))
end
function multiples_of_3_Or_5(n)
if(n % 3 == 0 && n % 5 == 0)
return 0
elseif(n % 3 == 0)
return n
elseif(n % 5 == 0)
return n
else
return 0
end
end
决赛:
function addMultiplesOf3And5(N::Int)
array = range(1,N-1)
return reduce(+, filter(x -> ((x%3==0)$(x%5==0)), array))
end
【问题讨论】:
-
也许可以提供一些关于您迄今为止尝试过的细节。另见StackOverflow Homework Guidelines
-
自从我使用 map 函数已经有一段时间了,但据我回忆,它对列表的每个元素都应用了一个函数。所以当然 for 循环也可以做到这一点。所以应该清楚如何使用 for 循环来代替。
标签: julia