Re: [問題] 兩個計算上的小問題

看板Ruby作者 (putumaxally)時間10年前 (2014/05/31 23:23), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《timeregorge (vincent)》之銘言: : a = [2,4,6,8,10] : a[0,2].inject(3) { |sum,element| sum + element } : 為什麼結果是9? 計算過程是怎麼算的呢? [2, 4].inject(3) { |sum, element| sum + element } Enumerable 的 inject 會把上面的 block 跑陣列大小的次數,然後依序把元素 帶入 block 的第二的參數(目前是 element),然後 block 最後的運算結果再丟 給 block 的第一個參數(上面定義為 sum),但是第一次執行的時候 sum 沒有值 所以就是你給 inject 的引數,所以第一次執行 block 的 sum 就是你打的 3 執行過程就是: 第一次跑 block => sum = 3, element = 2 # 3 就是你給 inject 的引數 block 回傳 sum + element # => 5 第二次跑 block => sum = 5, element = 4 # 5 就是上次 block 的回傳值 block 回傳 sum + element # => 9 只有兩個元素,所以只跑兩次回傳最後一次的 block 的回傳值 9 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.180.68.25 ※ 文章網址: http://www.ptt.cc/bbs/Ruby/M.1401549784.A.F90.html ※ 編輯: putumaxally (175.180.68.25), 05/31/2014 23:24:56

06/03 00:16, , 1F
謝謝您的解說,不過您的例子前面是否是[0,2]呢?
06/03 00:16, 1F
[2, 4] 就是你的 a[0, 2] ※ 編輯: putumaxally (175.180.68.25), 06/03/2014 01:46:09
文章代碼(AID): #1JYVFO-G (Ruby)
文章代碼(AID): #1JYVFO-G (Ruby)