1 つは文字列用、もう 1 つはそれが繰り返される回数の 2 つの引数を取るメソッドを作成しようとしています。ここに私が持っているコードがあります:
def repeat(text,c=2)
c.times do print text end
end
repeat ("hi")
ここでの問題は、結果を「ハイハイ」にしたいということです。
助けてくれてありがとう!
1 つは文字列用、もう 1 つはそれが繰り返される回数の 2 つの引数を取るメソッドを作成しようとしています。ここに私が持っているコードがあります:
def repeat(text,c=2)
c.times do print text end
end
repeat ("hi")
ここでの問題は、結果を「ハイハイ」にしたいということです。
助けてくれてありがとう!
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
def repeat(text, c=2)
print Array.new(c, text).join(' ')
end
私はルビーに慣れていませんが、この解決策は私にとってうまくいくと思い、自分で考え出しました。
def repeat(word, i=2)
word + (" #{word}" * (i-1))
end
これを試すことができます:
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
もう少し冗長ですが (これは間違いなく Ruby に似ていません)、作業は少なくなります (その方が理にかなっているかもしれません)。