簡體   English   中英

函數鏈中的條件朱莉婭(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

當我嘗試使用函數鏈接的相同方法時,它無法返回我期望的答案,而是返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM