ผมอ่านเอกสารทับทิมและได้สับสนกับความแตกต่างระหว่างและ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