Re: [問題] 開檔和讀檔問題

看板Ruby作者 (godfat 真常)時間18年前 (2006/12/16 12:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
※ 引述《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
文章代碼(AID): #15WtC4Ld (Ruby)
文章代碼(AID): #15WtC4Ld (Ruby)