ผมอ่านเอกสารทับทิมและได้สับสนกับความแตกต่างระหว่างและgsub trอะไรคือความแตกต่างระหว่างทั้งสอง?
ผมอ่านเอกสารทับทิมและได้สับสนกับความแตกต่างระหว่างและgsub trอะไรคือความแตกต่างระหว่างทั้งสอง?
คำตอบ:
ใช้trเมื่อคุณต้องการแทนที่ (แปล) อักขระเดี่ยว
trจับคู่กับอักขระเดี่ยว (ไม่ใช่ผ่านนิพจน์ทั่วไป) ดังนั้นอักขระจึงไม่จำเป็นต้องอยู่ในลำดับเดียวกันในอาร์กิวเมนต์สตริงแรก เมื่อพบอักขระจะถูกแทนที่ด้วยอักขระที่พบในดัชนีเดียวกันในอาร์กิวเมนต์สตริงที่สอง:
'abcde'.tr('bda', '123')
#=> "31c2e"
'abcde'.tr('bcd', '123')
#=> "a123e"
ใช้gsubเมื่อคุณต้องการใช้นิพจน์ทั่วไปหรือเมื่อคุณต้องการแทนที่สตริงย่อยที่ยาวขึ้น:
'abcde'.gsub(/bda/, '123')
#=> "abcde"
'abcde'.gsub(/b.d/, '123')
#=> "a123e"
trหมายถึง "แปล" เช่นเดียวกับ "แปลอักขระ" ซึ่งเป็นสิ่งที่ทำ มันตั้งชื่อตามยูทิลิตี้ Unix ที่มีชื่อเดียวกัน (ซึ่งเป็นที่รู้จักกันดีในชื่อที่คลุมเครือและชื่อสั้น ๆ )
trสามารถแทนที่อักขระเดี่ยวด้วยอักขระคงที่เพียงตัวเดียวเท่านั้น (แม้ว่าคุณจะสามารถจับคู่การเรียงลำดับนี้ได้หลายรายการในการtrโทรครั้งเดียว) แต่ทำได้รวดเร็วgsubสามารถตรงกับรูปแบบที่ซับซ้อนโดยใช้ regex และแทนที่ด้วยผลการคำนวณที่ซับซ้อน trแต่จะช้ากว่าtr gsubนี่คือเกณฑ์มาตรฐานว่าtrจะเร็วกว่าgsubนี้ได้อย่างไร github.com/JuanitoFatas/fast-ruby/blob/master/code/string/…
trผลตอบแทนที่ได้สำเนาของstrกับตัวละครในแทนที่ด้วยตัวละครที่เกี่ยวข้องในfrom_str to_strถ้าto_strสั้นกว่าfrom_strนั้นจะถูกเติมด้วยอักขระสุดท้ายเพื่อรักษาการติดต่อกัน
http://apidock.com/ruby/String/tr
gsubส่งคืนสำเนาstrที่เกิดขึ้นทั้งหมดของรูปแบบที่ถูกแทนที่สำหรับอาร์กิวเมนต์ที่สอง รูปแบบโดยทั่วไปคือ Regexp; หากกำหนดเป็นสตริงเมตาอักขระของนิพจน์ทั่วไปใด ๆ ที่มีอยู่จะถูกตีความตามตัวอักษรเช่น\dจะจับคู่ฟันเฟืองตามด้วยdแทนตัวเลข
http://apidock.com/ruby/String/gsub