1

3桁ごとにコンマを文字列に補間しようとしています。補間は文字列の最後から行う必要があります。したがって、入力は次のとおりです。

"12345678"

出力は次のようになります。

"12,345,678"

これまでのところ、私は思いついた:

"12345678".reverse.gsub(/(\d{3})(?=.)/) { $1 + ',' }.reverse

しかし、これは私には少し不格好に思えます。これをよりエレガントに解決する方法についてのアイデアはありますか?

4

6 に答える 6

0

もう 1 つの方法は、もう少し一般化してメソッドに簡単に収まるようにし、新しい Ruby 2 構文を使用するものです。

def intersperse(ns, char: ",", step: 3)
  ys = ""
  ns.chars.each_with_index{|n,i|
    ys << char if i % step == ns.length % step unless i == 0
    ys << n 
  }
  ys
end

ns = "12345678"
intersperse ns
# => "12,345,678"
intersperse ns, step: 2
# => "12,34,56,78"
intersperse ns, char: "!"
# => "12!345!678"
于 2013-04-10T15:16:56.410 に答える