Re: [問題] 開檔和讀檔問題
※ 引述《skyboy (yes i do...)》之銘言:
抱歉,我覺得這種東西應該拿到討論板上討論 :)
: $1剛剛已經看過網頁 得知是存value,
: 那$~是存MatchData object, 也就是後面regular expression中的( )
不,$~ 是存「整個」match 而不是 () 裡的東西,$數字 才是
也就是,$1 是第一個 () 內的,$2 是第二個 () 內的,依此類推
而 $1 == $~[1]
$2 == $~[2]
etc.
: 那我可以在一個regular expression中, 分別找出分別要的東西和他的個數總和嗎?
: 那如果是可以的話, 他是存在hash裡的哪個位置?
前一個答案是理所當然,後一個答案是,看你怎麼存到 hash 中的
既然你熟悉 C/C++, 應該知道 hash or map 吧?
Ruby 的 hash 就是 key => value 的對應,跟 regular expression 本身沒有關係
: 以上面的例子, 如果content =~/\d+-(\w*\s\w*)(\d+\d+)\s*/
: 那表示我要抓 (1)這個 (2)和這個出來
: 可以分別對 (1) 和 (2) 計算他總共出現幾次嗎??
$1 對應第一個括號內的東西,$2 對應第二個括號內的東西
你要分別計算次數,可以開兩個 hash 出來
hashes = [Hash.new(0), Hash.new(0)]
hashes[0][$1] += 1
hashes[1][$2] += 1
etc.
: 如果可以, 下面的
: hash.to_a.sort {|x,y| y[1] <=> x[1]}.each do |w,c|
: puts "#{w} : #{c} times"
: end
: 又該如何分別取出值呢?
不是如何取出值,就像上面所說的,重點是你怎麼存進去的
以該網頁的儲存法,並沒有辦法取出你所要的資料
因為那裡的做法,只存了一個 key 和 value 的對應
你可以像我上面說的那樣,開兩個 Hash 出來儲存
或是如果你不介意 (1) 和 (2) 可能會重疊,直接用一個 hash 去存也可
hash[$1] += 1
hash[$2] += 1
單單像這樣就好,這樣你取出的地方也不必做修改
只是如果你 $1 和 $2 重複了,那他們會一起算次數
如 (1) 是 Ruby, (2) 也是 Ruby, 那麼算出來的就會是 2 而不是個別 1
--
生死去来、棚頭傀儡、一線断時、落落磊磊
《花鏡》-世阿弥
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.83.41
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章