[英]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
當我嘗試使用函數鏈接的相同方法時,它無法返回我期望的答案,而是返回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}
意味着要解析的值是一個integer64數組。 因此,評估以下內容:
[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
評估結果為預期答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.