tr和gsub有什么区别?

125 ruby

我读了Ruby的文档,并与之间的区别糊涂了gsubtr.两者有什么区别?

spi*_*ann 165

使用tr时要替换(翻译)单个字符.

tr匹配单个字符(不是通过正则表达式),因此字符不需要在第一个字符串参数中以相同的顺序出现.找到一个字符后,它将替换为第二个字符串参数中相同索引处找到的字符:

'abcde'.tr('bda', '123')
#=> "31c2e"

'abcde'.tr('bcd', '123')
#=> "a123e"
Run Code Online (Sandbox Code Playgroud)

使用gsub时,你需要使用正则表达式或当你想更换更长的字符串:

'abcde'.gsub(/bda/, '123')
#=> "abcde"

'abcde'.gsub(/b.d/, '123')
#=> "a123e"
Run Code Online (Sandbox Code Playgroud)

  • 上下文:名称`tr`的意思是"翻译",如"翻译字符",这正是它的作用.它以同名的Unix实用程序命名(以其晦涩和短名称而闻名). (42认同)

saw*_*awa 37

  • tr只能用一个固定字符替换单个字符(虽然你可以在一次tr调用中放置多个这种匹配)但速度很快.
  • gsub可以使用正则表达式匹配复杂的模式,并用复杂的计算结果替换,但速度比tr.

  • 那是对的.当两个工作`tr`比`gsub`快几倍.这里是`tr`比`gsub`快多少的基准.https://github.com/JuanitoFatas/fast-ruby/blob/master/code/string/gsub-vs-tr.rb (9认同)

Joe*_*oel 8

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