いしのなかにいる

*いしのなかにいる*

oops ! I am in rock !

【Ruby】配列内の文字列を数値に一括変換する

カンマ区切りの数字の文字列を一気に数値に変換したいときってありませんか?

たとえばこんなやつです。

"1,2,3..."

これ、何も考えずにカンマで分割すると、文字列の配列になっちゃうんですよね。

こんな感じに

> "1,2,3".split(",")
=> ["1", "2", "3"]

ActiveRecordの検索に使う分には問題ないのですが、数値として使いたいときとかにちょいちょい不便。

なので、配列内の文字列を数値に一括置換する方法を調べてみました。

map(&:to_i)を呼び出して一括変換

> "1,2,3".split(",").map(&:to_i)
=> [1, 2, 3]

これだけです!

ちなみにmapは新しい配列を作って返すだけなので、元のリストを書き換えちゃっていい場合はmap!を使いましょう。

map, map! (Array) - Rubyリファレンス - AmiWiki

mapメソッドは、要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します

とのことなので、結局やっていることは配列内の各要素のto_iをしているだけなんだろうけど、 メソッドを呼ぶだけで一発で変換できるのは気持ちいいですね!

リストに文字列が含まれている場合は?

ちなみに配列の中に文字列が入っていた場合は 0 に変換されるようです。
(これはto_iの動作ですね)

> ["1", "2", "hoge"].map(&:to_i)
=> [1, 2, 0]

以上!