我正在尝试编写一个方法,该方法将采用两个参数,一个用于字符串,另一个用于重复它的次数。这是我的代码:
def repeat(text,c=2)
c.times do print text end
end
repeat ("hi")
这里的问题是,我希望结果是“hi hi”,我尝试了“puts”,但它开始了一个新行...... [打印文本“+”文本]也不起作用......
谢谢您的帮助!
我正在尝试编写一个方法,该方法将采用两个参数,一个用于字符串,另一个用于重复它的次数。这是我的代码:
def repeat(text,c=2)
c.times do print text end
end
repeat ("hi")
这里的问题是,我希望结果是“hi hi”,我尝试了“puts”,但它开始了一个新行...... [打印文本“+”文本]也不起作用......
谢谢您的帮助!
只需将字符串乘以数字,Ruby 就足够聪明,知道您的意思;)
pry(main)> "abcabcabc" * 3
=> "abcabcabcabcabcabcabcabcabc"
Enumerator#cycle
返回一个枚举器:
puts ['hi'].cycle(3).to_a.join(' ')
# => hi hi hi
分解代码:
['hi']
创建一个包含字符串的数组
cycle(3)
从重复元素 3 次的数组中创建一个枚举器
.to_a
从枚举器创建一个数组,以便 的join
方法Array
可以创建最终的输出字符串。
或者您可以执行以下操作:
def repeat(text, c=2)
print c.times.collect { text }.join(' ')
end
我是 ruby 的新手,但我认为这个解决方案对我很有效,我自己想出了它。
def repeat(word, i=2)
word + (" #{word}" * (i-1))
end
def repeat(text, c=2)
print Array.new(c, text).join(' ')
end
def repeat(text, c=2)
print ([text]*c).join(' ')
end
也许更容易阅读。除非,有什么理由改用 .collect 方法吗?
你可以试试这个:
def repeat(text, c=2)
print ((text + ' ')*c).strip
end
我没有看到创建数组(有或没有 collect())然后调用 join() 的意义。这也有效:
def repeat(text, c=2)
c.times { |i| print text; print ' ' unless i+1 == c }
end
虽然,它有点冗长(可以说不像红宝石),但它做的工作更少(这可能更有意义)。