2012-02-02 5 views
2

私の文字列を5文字のグループにしたい、例えば。ruby​​ - 最後のグループのアンダースコアに「5文字のグループ」を埋め込む方法は?

thisisastring => ["thisi", "satri", "ng"] 

しかし、最後のグループに__を埋め込むことも忘れないでください。

thisisastring => ["thisi", "satri", "ng___"] 

私は、文字列分割限り持っている:

"thisisastring".scan /.{5}/) 

["thisi", "satri", "ng"] 

だけに始まるものの「ng___」にするために、その最後のグループのために

をパディングを行う方法あまりにもわかりません被除数(div())、係数(%)と.ljustの組み合わせがそれをするかもしれないと思う。

多分、パディング文字の数は:(length % 5) * "_"(それを掛けることができる場合)ですか?

使用

おそらく何か:さえ近い効率的に

ruby-1.9.2-p290 :023 > (len % 5).to_i.times { print '_' } 
___ => 3 
+2

Rubyのエキスパートではありませんが、配列の最後の要素の長さをチェックするだけではありません。 5長さの '_'を付け加えますか? – sln

答えて

4

調整は最後の要素でのみ必要です。調整を行う要素を反復するのではなく、分割する前に調整を行う方が効果的です。

("thisisastring"+"_"*("thisisastring".length % 5)).scan(/.{5}/) 
+0

はい、私が思っていたこと、何かmutiplies "_" –

6

をしていますが、1行にトンを望んでいたならば、それは、このようなものが動作するはずです:以来

"thisisastring".scan(/.{1,5}/).collect {|x| x.ljust(5,"_")} 
+0

はい、「ちょうどいいよ。 – steenslag

+0

私はそれが好きです。効率的ではないと言うと、おそらくアクティブサポートを使用するよりも良いでしょうか? –

+0

私はタイミングを実行することができますが、意見も欲しかった –

関連する問題