看板 Ruby 關於我們 聯絡資訊
※ 引述《itucson (愛吐桑)》之銘言: : : 兩個字串一樣長,就 zip 起來並 fold : : 兩種狀況: : : 0. 串到最後一個詞 : : 1. 串新詞 : : 寫成程式就是: : : s = '網路應用程式' : : b = '001101' : : result = s.scan(/./u).zip(b.scan(/./)).inject([[]]){ |r, i| : : r.last << i.first : : r << [' '] if i.last == '1' : : r : : }.join : : puts result : : # => 網路應 用 程式 : : 我查了幾天了,可是還是看不懂 .inject([[]])的意思 : 能不能請大大解釋一下 XD : : → itucson:是初使成二維陣列嗎? 05/21 15 是的,一開始的 r 會是 [[]], 一個陣列中包著另一個空陣列 外層的陣列有一個元素,這個元素是一個空陣列 而 i 就依序會是 zip 過後的陣列,裡面的所有元素 inject (fold) 用熟悉後,就會覺得很好用了 :p 我第一次看到這個東西,只覺得這什麼鬼,太難懂了吧? 其實也能寫成 each 的形式: r = [[]] s.scan(/./u).zip(b.scan(/./)).each{ |i| r.last << i.first r << [' '] if i.last == '1' } result = r.join puts result 不過我比較喜歡 fold XD http://en.wikipedia.org/wiki/Fold_(higher-order_function) -- 生死去来、棚頭傀儡、一線断時、落落磊磊 《花鏡》-世阿弥 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.28.18
itucson:感謝版大,正在努力中 ^^ 05/24 21:29
jaiyalas:你幾時要往unfold邁進呀? XD 05/25 17:09
godfat:想太多... XD 05/26 22:35