15

我正在尝试编写一个方法,该方法将采用两个参数,一个用于字符串,另一个用于重复它的次数。这是我的代码:

 def repeat(text,c=2)
   c.times do print text end
 end

 repeat ("hi")

这里的问题是,我希望结果是“hi hi”,我尝试了“puts”,但它开始了一个新行...... [打印文本“+”文本]也不起作用......

谢谢您的帮助!

4

9 回答 9

27

你的问题不清楚。如果您只想打印重复 n 次的文本,请使用String#*

def repeat(text, n=2)
  print text * n
end

您的示例结果表明您想要"hi hi"暗示您希望每次重复之间有空格。最简洁的方法是使用Array#*

def repeat(text, n=2)
  print [text] * n * ' '
end
于 2013-02-11T03:04:24.763 回答
13

只需将字符串乘以数字,Ruby 就足够聪明,知道您的意思;)

pry(main)> "abcabcabc" * 3
=> "abcabcabcabcabcabcabcabcabc"
于 2019-10-14T22:10:08.350 回答
5

Enumerator#cycle返回一个枚举器:

puts ['hi'].cycle(3).to_a.join(' ')

# => hi hi hi

分解代码:

['hi']创建一个包含字符串的数组

cycle(3)从重复元素 3 次的数组中创建一个枚举器

.to_a从枚举器创建一个数组,以便 的join方法Array可以创建最终的输出字符串。

于 2013-02-10T18:27:57.030 回答
5

或者您可以执行以下操作:

def repeat(text, c=2)
  print c.times.collect { text }.join(' ')
end
于 2013-02-10T07:28:04.070 回答
1

我是 ruby​​ 的新手,但我认为这个解决方案对我很有效,我自己想出了它。

def repeat(word, i=2)
  word + (" #{word}" * (i-1))   
end
于 2014-08-12T20:30:40.543 回答
1
def repeat(text, c=2)
  print Array.new(c, text).join(' ')
end
于 2016-10-24T21:13:39.343 回答
0
def repeat(text, c=2)
  print ([text]*c).join(' ')
end

也许更容易阅读。除非,有什么理由改用 .collect 方法吗?

于 2014-12-04T07:33:40.500 回答
0

你可以试试这个:

 def repeat(text, c=2)
   print ((text + ' ')*c).strip
 end
于 2013-02-10T06:56:39.140 回答
0

我没有看到创建数组(有或没有 collect())然后调用 join() 的意义。这也有效:

def repeat(text, c=2)
  c.times { |i| print text; print ' ' unless i+1 == c }
end

虽然,它有点冗长(可以说不像红宝石),但它做的工作更少(这可能更有意义)。

于 2015-09-13T21:50:43.657 回答