15

1 つは文字列用、もう 1 つはそれが繰り返される回数の 2 つの引数を取るメソッドを作成しようとしています。ここに私が持っているコードがあります:

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

 repeat ("hi")

ここでの問題は、結果を「ハイハイ」にしたいということです。

助けてくれてありがとう!

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 に答える
5

Enumerator#cycle列挙子を返します:

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

# => hi hi hi

コードを分解する:

['hi']文字列を含む配列を作成します

cycle(3)要素を 3 回繰り返す配列から列挙子を作成します

.to_ajoinのメソッドが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
def repeat(text, c=2)
  print Array.new(c, text).join(' ')
end
于 2016-10-24T21:13:39.343 に答える
1

私はルビーに慣れていませんが、この解決策は私にとってうまくいくと思い、自分で考え出しました。

def repeat(word, i=2)
  word + (" #{word}" * (i-1))   
end
于 2014-08-12T20:30:40.543 に答える
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

もう少し冗長ですが (これは間違いなく Ruby に似ていません)、作業は少なくなります (その方が理にかなっているかもしれません)。

于 2015-09-13T21:50:43.657 に答える