果然有超过一种转换为以下字符串两种形式从左到右更多,反之亦然字符串操作
"content-management-systems" <=> "Content Management Systems"
什么是Ruby之道吗?
果然有超过一种转换为以下字符串两种形式从左到右更多,反之亦然字符串操作
"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
清洁变体(从迈克尔):
"content-management-systems".split("-").map(&:capitalize).join(" ").
split(" ").map(&:downcase).join("-")
和完整的往返:''content-management-systems“.split(” - “)。map(&:capitalize).join(”“).split(”“).map(&:downcase)。加入(“ - ”)' – 2012-04-13 12:56:14
哇!这太好了,你是石头! – 2012-04-13 12:57:33
@Micheal,你是对的,但你看不到结果 – megas 2012-04-13 12:58:15
gsub
正则表达式匹配可以在块被操纵模式。
"content-management-systems".
gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }.
gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
,并为这些基准测试显示正则表达式和 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)
我欣赏正则表达式,...但看到我的答案... – 2012-04-13 13:26:52
@ LucaG.Soave我知道,只添加显示另一种方式。 – 2012-04-13 13:31:44
是啊,正则表达式在这里失踪,谢谢。 – 2012-04-13 13:38:27
我张贴这只是要记住...... 正则表达式只需双击计算时间:
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)
,我想感谢:-)
感谢您的数据!正则表达式从来没有手动操作那么快,但它很漂亮......如果你知道正则表达式,那么它的编码速度会更快 – texasbruce 2012-04-13 13:31:35
@Luca G. Soave,在这种情况下,你不需要使用'tap {| str |把' – megas 2012-04-13 13:36:49
@megas正确,在这种情况下甚至更快一点(0.000010) – 2012-04-13 13:50:15
ERM对不起所有贡献你改写这个问题根本没有意义 – 2012-04-13 12:41:51
鉴于字符串“content-management-systems”,你如何获得带有Ruby的“Content Management Systems”字符串? 然后给“内容管理系统”,你如何获得“内容管理系统”? – 2012-04-13 12:47:37