0

私のプログラムでは、文字列に二重文字のメソッドを追加したいと考えています。私の質問には、それに対するパブリックメソッドはありますか? 例えば:

'The'TThhee'

ここに私が持っているものがあります:

puts "Please enter text: "
input = gets
letters = input.chomp.to_s
puts "You entered: " + letters + "."

list_letters = letters.split(//)
list = list_letters.join(". ")* 2.to_i  

puts "Your text is made up of the letters: " + list + "."
4

4 に答える 4

4
letters.gsub(/(.)/, '\1\1')

またはさらに短い:

letters.gsub(/./, '\&\&')

もう少し快適:

class String
  def char_duplicate
    self.gsub(/./, '\&\&')
  end
end

puts "abc".char_duplicate #aabbcc
puts "abca".char_duplicate #aabbccaa

あなたのコード例は何か違うものになります。おそらく、あなたは次のようなことをしたいと思っていました:

 letters.split(//).map{|x| x * 2 }.join

また

 letters.each_char.map{|x| x * 2 }.join
于 2012-04-15T21:29:23.167 に答える
3

ただ違うように:

(['The'.each_char.to_a]*2).transpose.join
于 2012-04-15T21:41:38.850 に答える
1

いくらか工夫されていても、すべてを 1 行で実行できます。スペースを複製しない方がいいと思ったので、注入しました。

>> "foo bar".chomp.split("").inject([]) { |a,l| l =~ /\S/ ? a << l*2 : a << l }.join("")
=> "ffoooo bbaarr"

編集:考え直して、あなたもできる

>> "foo bar".gsub(/\S/, '\&\&')
=> "ffoooo bbaarr"

私が最近Rubyをほとんどやったことがないことを示すために行きます =)

于 2012-04-15T21:36:38.853 に答える
0

@knutのようにこれを行います。ただし、さまざまな楽しみのために、さらにいくつか紹介します。

irb(main):002:0> s.chars.map{ |c| c*2 }.join
#=> "TThhee"

irb(main):004:0> s.chars.zip(s.chars).join
#=> "TThhee"

irb(main):005:0> s.chars.inject(""){ |d,c| d << c << c }
#=> "TThhee"

irb(main):010:0> "".tap{ |d| s.each_char{ |c| d << c*2 } }
#=> "TThhee"
于 2012-04-15T21:40:56.287 に答える