10

配列をシリアル化し、文字列から逆シリアル化するにはどうすればよいですか?次のコードを試しましたが、実際には元の整数の配列を返しませんが、文字列の配列を返します。

 x = [1,2,3].join(',') # maybe this is not the correct way to serialize to string?
 => '1,2,3'

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

?を持たずに整数に戻す方法はあり.collect{ |x| x.to_i }ますか?

4

2 に答える 2

32

標準的な方法は次のMarshalとおりです。

x = Marshal.dump([1, 2, 3])
#=> "\x04\b[\bi\x06i\ai\b"

Marshal.load(x)
#=> [1, 2, 3]

しかし、あなたもそれを行うことができますJSON

require 'json'

x = [1, 2, 3].to_json
#=> "[1,2,3]"

JSON::parse(x)
#=> [1, 2, 3]

またはYAML

require 'yaml'

x = [1, 2, 3].to_yaml
#=> "---\n- 1\n- 2\n- 3\n"

YAML.load(x)
#=> [1, 2, 3]
于 2013-03-17T11:51:37.690 に答える
3

Splitは、文字列を切り刻むための単なるツールです。その文字列がどこから来たのかはわかりません。

データをシリアル化する方法はたくさんあります。Ruby標準ライブラリの一部であるYAML、JSON、Marshalの3つです。すべて文字列、整数などを区別します。

それぞれに長所と短所があります。たとえば、信頼できないソースからMarshalデータをロードすることは危険であり、Ruby以外のコードとデータを交換する必要がある場合はMarshalは適切ではありません。通常、JSONは優れたオールラウンダーです。

于 2013-03-17T11:55:22.367 に答える