概要
例えば特定のIDをもったデータを参照したいとかで
[1725,1726,1727]
みたいなものが入ったスクリプトやSQLなどを書いたりすることがあると思います。
自分は1回これを
[1725.1726,1727]
みたいな感じでタイポし、盛大にバグを出しました。
そこで再発防止でこういうものはすべてプログラムで出力してコピペするようにしています。
自分はirbでワンライナーを書いて出力をコピペしています。ターミナルに3文字打つだけで起動してくれますし、多少数が増えるとプログラムを書く方が早く、また応用も効くのでおすすめです。
例
配列の中身
(1725..1727).to_a.join(',')
=> "1725,1726,1727"
長い配列の中身
(1725..1735).to_a.join(',')
=> "1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735"
間が抜けた数字の列挙
[*1725..1727,*1750..1752].join(',')
=> "1725,1726,1727,1750,1751,1752"
条件をつけて絞り込む(3の倍数の列挙)
*@scivolaさんから指摘していただきました、range型にselectが使えて返り値が配列なのでto_aが消せます
(1725..1735).select{|n|n%3==0}.join(',')
=> "1725,1728,1731,1734"
前のコード
(1725..1735).to_a.select{|n|n%3==0}.join(',') => "1725,1728,1731,1734"
改行を入れて縦に並べる
*@scivolaさんから指摘していただきました、putsに配列を渡すと改行して表示されるため改行コードでのjoinが不要です。また[*1725..1727,*1750..1752]の時点で配列なのでto_aも不要です。
puts [*1725..1727,*1750..1752]
1725
1726
1727
1750
1751
1752
=> nil
前のコード
puts [*1725..1727,*1750..1752].to_a.join("\n") 1725 1726 1727 1750 1751 1752 => nil
文字に番号がついている場合
*@scivolaさんから指摘していただきました、改行コードでのjoinが不要なほか、ruby2.7以降なら番号指定パラメータを使い記述を減らせます
puts (1..15).to_a.map{"id_#{_1},"}
id_1,
id_2,
id_3,
id_4,
id_5,
id_6,
id_7,
id_8,
id_9,
id_10,
id_11,
id_12,
id_13,
id_14,
id_15,
=> nil
前のコード
puts (1..15).to_a.map{|n|"id_#{n},"}.join("\n") id_1, id_2, id_3, id_4, id_5, id_6, id_7, id_8, id_9, id_10, id_11, id_12, id_13, id_14, id_15, => nil
初心にかえって、普段ミス防止にやっていることを書いてみました。今回はレンジ型を主に使う例をあげましたが、csvを読み込んで使ったり、DBからcsvを出力して使ったりするともっといろいろなものが作れます。手で列挙したものから目検などでミスをみつけようとすると非常に大変なので作れるものはできる限りプログラムで作るのが良いです。