我最近一直试图通过转换我用Python编写的简单程序来学习Ruby。
在Python中,我有一个程序,它定义了一个函数,该函数接受一个字符串并返回一个新字符串,该字符串是旧字符串,每个字符之间都有一个破折号。
因此,“你好”将以“-h-e-l-l-o”的形式返回。
在Python中,这非常简单,因为您只需循环遍历原始字符串的每个字符,并将其添加到新字符串加上破折号。
然而,在Ruby中这似乎更难,因为据我所知,我不能只在Ruby中循环一个字符串。
这样做的好方法是什么?
答案 0 :(得分:6)
是..你可以
"hello".chars.map { |c| "-#{c}" }.join
# => "-h-e-l-l-o"
查看更多Ruby功能
string = 'hello'
"-%s" * string.size % string.chars
# => "-h-e-l-l-o"
答案 1 :(得分:1)
你也可以这样做......
"hello".split('').join('-')
嗯,但它并没有给你领先。但是你明白了。
如果你真的需要领先的' - '你可以这样做....
"hello".split('').reduce(''){|s,c| s += '-' + c}
我现在学到的东西可以做得更好:
"hello".chars.reduce(''){|s,c| s += '-' + c}
答案 2 :(得分:1)
什么意思是“循环通过字符串”。你循环遍历字符,所以在Ruby中你写的就是:
'abba'.each_char { |c| puts c }
但是你正在努力实现其他目标(你已经写了别的东西,你的例子就是别的东西)。有两种方法可以实现你所说的:
'hello'.chars.join('-')
或
'hello'.gsub(//, '-')
两者都将返回相同的字符串:h-e-l-l-o
。
要实现您的示例,您可以使用regexp:
'hello'.gsub(/(\w)/, '-\1')
或地图
'hellp'.each_char.map { |c| "-#{c}" }.join
但第二个恕我直言会慢一些。
答案 3 :(得分:1)
完成后,一个不使用显式迭代器的方法:
([''] + s.split('')).join('-')
答案 4 :(得分:1)