作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 句子断词
时间Thu May 22 13:11:55 2008
※ 引述《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
1F:推 itucson:感谢版大,正在努力中 ^^ 05/24 21:29
2F:推 jaiyalas:你几时要往unfold迈进呀? XD 05/25 17:09
3F:→ godfat:想太多... XD 05/26 22:35