重复方法给“字符串”一个“x”次

时间:2013-02-10 06:47:02

标签: ruby

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

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

 repeat ("hi")

这里的问题是,我希望结果是“你好” 我试过“推”,但这开始了新的一行...... [打印文字“+”文字]不起作用......

感谢您的帮助!

9 个答案:

答案 0 :(得分:14)

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

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

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

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

答案 1 :(得分:4)

或者你可以这样做:

def repeat(text, c=2)
  print c.times.collect { text }.join(' ')
end

答案 2 :(得分:4)

Enumerator#cycle返回一个枚举器:

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

# => hi hi hi

分解代码:

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

的数组

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

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

答案 3 :(得分:1)

我是ruby的新手,但我觉得这个解决方案对我有用,我自己想出来了。

def repeat(word, i=2)
  word + (" #{word}" * (i-1))   
end

答案 4 :(得分:1)

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

pry(main)> "abcabcabc" * 3
=> "abcabcabcabcabcabcabcabcabc"

答案 5 :(得分:0)

你可以试试这个:

 def repeat(text, c=2)
   print ((text + ' ')*c).strip
 end

答案 6 :(得分:0)

def repeat(text, c=2)
  print ([text]*c).join(' ')
end

也许更容易阅读。除非,有没有理由使用.collect方法呢?

答案 7 :(得分:0)

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

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

虽然,它有点冗长(可以说是非红宝石)但它的工作量较少(这可能更有意义)。

答案 8 :(得分:0)

def repeat(text, c=2)
  print Array.new(c, text).join(' ')
end