Rubyのブラケット付き文字列をArrayに変換する方法

Rubyを使用していて、ブラケット形式の文字列に直面した場合、その文字列を配列、あるいはネストされた配列に変換する必要があるかもしれません。この投稿では、次のようにフォーマットされた文字列:[[this, is],[a, nested],[array]]を、対応する配列:[['this','is'],['a','nested'],['array']]に変換する具体的な例を掘り下げます。

問題の理解

手にしている文字列は一見簡単そうに見えるかもしれませんが、使える配列形式にパースするのはかなり手間がかかることがあります。問題は、要素の構造とRubyの解釈方法から生じます。これに対処するために、Rubyが簡単に扱えるデータシリアリゼーション言語であるYAMLを活用できます。

ステップバイステップの解決策

文字列を配列に変換するには、次の手順を実行してください。

1. 文字列の準備

元の文字列はYAML用の適切なフォーマットが欠けているかもしれません。具体的には、YAMLは各カンマの後にスペースが必要です。したがって、これを[[this, is], [a, nested], [array]]に更新する必要があります。Rubyでの実装は以下のようになります。

str = "[[this, is],[a, nested],[array]]"
str.gsub!(/(\,)(\S)/, "\\1 \\2")

このコード行は元の文字列を修正し、カンマの後に非スペース文字が直に続く場合にスペースを挿入します。

2. YAMLライブラリの読み込み

RubyでYAMLの機能を使用するためには、YAMLライブラリを要求する必要があります。コードの先頭に以下の行を挿入してください。

require 'yaml'

3. 文字列を配列に変換

文字列が正しくフォーマットされ、YAMLライブラリを読み込んだら、簡単なコマンドで文字列を配列に変換できます。

newarray = YAML::load(str)

最終コード

すべてをまとめると、最終的なRubyコードは以下のようになります。

require 'yaml'
str = "[[this, is],[a, nested],[array]]"
str.gsub!(/(\,)(\S)/, "\\1 \\2")  # カンマの後にスペースを追加
newarray = YAML::load(str)        # 配列に変換
puts newarray.inspect              # 出力 => [['this', 'is'], ['a', 'nested'], ['array']]

結論

Rubyでブラケット付き文字列を配列に変換するのは、フォーマットの問題を扱い、YAMLライブラリを効果的に利用すれば簡単です。数行のコードで、データ構造を容易に操作できます。

そのため、次回、例のようなフォーマットの文字列を手にしたら、これらのステップを思い出し、すぐに使える配列に変換できるようにしてください!