Julia (Julia-lang) 在函数链中有条件
Julia (Julia-lang) conditional in function chaining
我正在尝试对 1 到 1000 之间所有可被 3 或 5 整除的数字求和。
第一次尝试很直接:
ans1 = 0
for x in 3:999
ans1 += x % 3 == 0 || x % 5 == 0 ? x : 0
end
当我尝试使用函数链接的相同方法时,它未能 return 我期望的答案,而是 returns 0.
ans2 = [3:999] |> x -> x % 3 == 0 || x % 5 == 0 ? x : 0 |> sum
我认为问题出在中心函数上,因为下面的代码打印了 3 到 999 范围内的所有值。所以我知道迭代没有问题。
[3:999] |> x -> println(x)
谁能帮帮我。
我发现原因是因为我不了解正在解析的类型。这是一个例子:
[3:999] |> println(typeof(x)) # Array{Int64,1}
意味着被解析的值是一个整数数组。因此评估以下内容:
[1:999] % 3 == 0 # false
所以我的答案是改用过滤器功能,这里有一个例子:
ans3 = sum(filter(x -> x % 3 == 0 || x % 5 == 0,[1:999]))
使用函数链的最终答案是:
ans4 = [1:999] |> x -> filter(y -> y % 3 == 0 || y % 5 == 0,x) |> sum
计算结果为预期答案。
我正在尝试对 1 到 1000 之间所有可被 3 或 5 整除的数字求和。
第一次尝试很直接:
ans1 = 0
for x in 3:999
ans1 += x % 3 == 0 || x % 5 == 0 ? x : 0
end
当我尝试使用函数链接的相同方法时,它未能 return 我期望的答案,而是 returns 0.
ans2 = [3:999] |> x -> x % 3 == 0 || x % 5 == 0 ? x : 0 |> sum
我认为问题出在中心函数上,因为下面的代码打印了 3 到 999 范围内的所有值。所以我知道迭代没有问题。
[3:999] |> x -> println(x)
谁能帮帮我。
我发现原因是因为我不了解正在解析的类型。这是一个例子:
[3:999] |> println(typeof(x)) # Array{Int64,1}
意味着被解析的值是一个整数数组。因此评估以下内容:
[1:999] % 3 == 0 # false
所以我的答案是改用过滤器功能,这里有一个例子:
ans3 = sum(filter(x -> x % 3 == 0 || x % 5 == 0,[1:999]))
使用函数链的最终答案是:
ans4 = [1:999] |> x -> filter(y -> y % 3 == 0 || y % 5 == 0,x) |> sum
计算结果为预期答案。