この投稿によると、シンボルをハッシュ キーとして使用することは素晴らしいことですが、文字列をハッシュ キーとして使用する必要があるのはいつですか?
キー連結、例えば
hash["name" + "xxx"]
そのようなケースかもしれませんが、必要性はまれだと思います。
キーの連結も簡単に変換できます。
hash[ ("name" + "xxx").to_sym ]
手短に言えば、Ruby で文字列をキーとして使用することを避けることでメリットが得られるということです。キーは、コード内で値を参照できるようにする単なるセマンティック ラベルです。その場合、シンボルがその仕事をより効率的に行うことは明らかです (上で指摘したように、ラベルを生成するために多くの変換を実行していなければ)。
XMl や JSON などの任意のデータを解析する場合、キーとしての文字列は、構造を表現するより自然な方法かもしれません。繰り返しになりますが、パーサーによって発行された文字列からラベルへの変換時間は、要因になる可能性があります。
次のような .yaml ファイルがある場合:
- thing1: value1
thing2: value2
thing3: value3
- thing1: value1
thing2: value2
thing3: value3
- thing1: value1
thing2: value2
thing3: value3
でロードするとYAML::load_file('filename')
、キーに文字列を使用する必要があります。
ただし、yaml ファイルが次のようになっている場合:
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
次に、キーに記号を使用できます。この場合のシンボルはルビー側に適していますが、yaml は文字列を使用するとよりクリーンになります。
ループ内で何度も実行している場合はhash["name"+"xxx"]
、キーをループから取り出してシンボルに変換すると効果的です。それは単なるパフォーマンスの問題です。シンボルはメモリ内の 1 つの場所を使用しますが、文字列は作成されるたびに計算されます。