チャレンジしてみるがうまくいかず。
下を見て納得。しかもきれい。
非常に勉強になった。
Rubyでどう書く?:連続した数列を範囲形式にまとめたい - builder by ZDNet Japan
>sawaさん # "2 8 5 4 6 2 5" => "2, 4-6, 8." a = $*[0].split(/\s+/).map{|i| i.to_i}.sort p a.inject([] << [a.shift]){|b, e| case e when b.last.first, b.last.last when b.last.last + 1; b.last[1] = e else b << [e] end b}.map {|i| i.join('-')}.join(', ') + '.'
今回理解したこと
- 空白で区切って配列
split(" ") と書いてしまっていたが split(/\s+/) と書いた方がよい。
- map
to_i をここで一気にやるために map を使う。なるほど。
最後の配列の入れ子を出力するところも、mapを使ってすっきり書ける。
- inject
結果に配列を使用するには、こう書けばいいのか。
出力前のデータとして、配列の入れ子を使うというのがイメージできなかった。
とっても勉強になりました。