Ruby 字符串操作
可以肯定的是,有多种方法可以将以下字符串从左到右或从左到右进行转换Ruby 字符串操作,ruby,string,Ruby,String,可以肯定的是,有多种方法可以将以下字符串从左到右或从左到右进行转换 "content-management-systems" <=> "Content Management Systems" “内容管理系统”“内容管理系统” 这里的ruby方式是什么?这是一种棘手的方式: puts "content-management-systems".split("-").map(&:capitalize).join(" "). tap{ |str| puts str}.
"content-management-systems" <=> "Content Management Systems"
“内容管理系统”“内容管理系统”
这里的ruby方式是什么?这是一种棘手的方式:
puts "content-management-systems".split("-").map(&:capitalize).join(" ").
tap{ |str| puts str}.
split.map(&:downcase).join("-")
#=> Content Management Systems
#=> content-management-systems
简化的变体:
"content-management-systems".split("-").map(&:capitalize).join(" ")
#=> Content Management Systems
"Content Management Systems".split.map(&:downcase).join("-")
#=> content-management-systems
清洁型(来自Micheal):
gsub
regexp匹配可以在块模式下操作
"content-management-systems".
gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }.
gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
正如这些基准测试所显示的,regexp和
noregexp版本
require 'benchmark'
STR = "content-management-systems".freeze
Benchmark.bmbm(10) do |x|
x.report("noregexp") {
STR.split("-").map(&:capitalize).join(" ").
split(" ").map(&:downcase).join("-")
}
x.report("rgexp") {
STR.
gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }.
gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
}
end
__END__
Rehearsal ----------------------------------------------
noregexp 0.000000 0.000000 0.000000 ( 0.000032)
rgexp 0.000000 0.000000 0.000000 ( 0.000035)
------------------------------------- total: 0.000000sec
user system total real
noregexp 0.000000 0.000000 0.000000 ( 0.000051)
rgexp 0.000000 0.000000 0.000000 ( 0.000058)
我发布这篇文章只是为了记住。。。 正则表达式只需加倍计算时间:
1.9.2p290 :014 > time = Benchmark.measure do
1.9.2p290 :015 > puts "content-management-systems".split("-").map(&:capitalize).join(" ").
1.9.2p290 :016 > tap{ |str| puts str}.
1.9.2p290 :017 > split.map(&:downcase).join("-")
1.9.2p290 :018?> end
Content Management Systems
content-management-systems
=> 0.000000 0.000000 0.000000 ( 0.000077)
1.9.2p290 :019 > time = Benchmark.measure do
1.9.2p290 :020 > "content-management-systems".gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }
1.9.2p290 :021?> "Content Management Systems".gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
1.9.2p290 :022?> end
=> 0.000000 0.000000 0.000000 ( 0.000164)
我要感谢所有的贡献:-)呃,对不起,你能重新表述一下这个问题吗?它根本没有意义,即使是字符串“内容管理系统”,你如何用Ruby获得“内容管理系统”字符串?然后给出了“内容管理系统”如何获得“内容管理系统”以及完整的往返过程:
“内容管理系统”。拆分(“-”).map(&:capitalize)。join(“”)。拆分(“”)。map(&:downcase)。join(“-”)
Wow!太棒了,你们这些石头!谢谢你的数据!Regexp从来没有手动操作那么快,但它非常奇特。。。如果你知道regexp,也许编码速度会更快well@LucaSoave,在这种情况下,您不需要使用'tap{str | puts str}@megas correct,在这种情况下甚至更快(0.000010)
1.9.2p290 :014 > time = Benchmark.measure do
1.9.2p290 :015 > puts "content-management-systems".split("-").map(&:capitalize).join(" ").
1.9.2p290 :016 > tap{ |str| puts str}.
1.9.2p290 :017 > split.map(&:downcase).join("-")
1.9.2p290 :018?> end
Content Management Systems
content-management-systems
=> 0.000000 0.000000 0.000000 ( 0.000077)
1.9.2p290 :019 > time = Benchmark.measure do
1.9.2p290 :020 > "content-management-systems".gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }
1.9.2p290 :021?> "Content Management Systems".gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
1.9.2p290 :022?> end
=> 0.000000 0.000000 0.000000 ( 0.000164)