Ruby字符串拼接添加空格

3

我需要创建一个重复给定单词的方法,但我认为我的设计有问题。我需要在单词之间添加空格,我错过了什么?

def repeat(word, repeats=2)
  sentence = word.to_s * repeats
  return sentence
end

1
不要过分纠结于负面评价。即使是一个看似简单的问题,不同的解决方法或让别人有机会教授都有其价值。 - computer_smile
4个回答

6

当然,你缺少了空格。

你可以这样做:

def repeat(word, repeats = 2)
  Array.new(repeats, word).join(" ")
end

1
另外,稍微缩短但不确定是否更易读:([word] * repeats).join(' ') - Andrew Marshall
更简短的写法:([word] * repeats) * ' ' - pguardiario
为什么要创建一个只有一个元素的时间数组,然后在其基础上构建呢?除非你在打高尔夫球,否则用记号来计数比用字节更有意义。 - sawa

3
您可以按照以下方式编写代码:
def repeat(word, repeats=2)
  ([word] * repeats).join(" ")
end

repeat("Hello",4)
# => "Hello Hello Hello Hello"

我相信这就是我要走的方向。我曾经写过 def repeat(word,repeats=2) sentence = word.to_s * repeats return sentence.join(" ") end,但在看到这个之后,我觉得那样做很愚蠢,也明白了为什么它是错的 :) - computer_smile

0

这里有一个更接近你的方法,而且不使用临时数组:

def repeat(word, repeats=2)
  ("#{word} " * repeats).chop
end
  • "#{word} " 使用字符串插值将word转换为字符串并追加一个空格
  • … * repeats 创建一个包含repeats个副本的字符串
  • .chop 返回去掉最后一个字符(尾随空格)的字符串

不需要创建数组可以使代码更快。


那么,如果你这样做了数千次,你能节省几分之一秒?谁在乎呢? - pguardiario
重点是您不必创建临时数组,拥有更快的代码只是一个不错的副作用。 - Stefan
但是你为了基准测试而大费周折,好像速度是最重要的指标一样。实际上并不是这样。 - pguardiario
@sawa 返回一个新的字符串,最后一个字符被删除 - 在这种情况下正是我想要的。在我看来,chomp!(" ")[0..-2]都不够简洁或漂亮。 - Stefan

0
w = 'kokot'
n = 13
n.times.map { w.each_char.to_a.shuffle.join }.tap { |a, _| a.capitalize! }.join(' ') << ?.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接