Сериализация массива хэшей - PullRequest
       0

Сериализация массива хэшей

0 голосов
/ 24 сентября 2018

У меня есть массив хэшей:

  records = [
    {
      ID: 'BOATY',
      Name: 'McBoatface, Boaty'
    },
    {
      ID: 'TRAINY',
      Name: 'McTrainface, Trainy'
    }
  ]

Я пытаюсь объединить их в массив строк:

["ID,BOATY","Name,McBoatface, Boaty","ID,TRAINY","Name,McTrainface, Trainy"]

Это, похоже, ничего не делает:

irb> records.collect{|r| r.each{|k,v| "\"#{k},#{v}\"" }}
#=> [{:ID=>"BOATY", :Name=>"McBoatface, Boaty"}, {:ID=>"TRAINY", :Name=>"McTrainface, Trainy"}]

** edit **

Форматирование (т. Е. ["Key0,Value0","Key1,Value1",...] требуется для соответствия интерфейсу поставщика.

** / edit **

Чего мне не хватает?

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

Вы уверены, что хотите сделать это таким образом?

Проверьте Marshal.Или JSON.

Вы можете сделать это глупо, используя Hash#inspect и eval:

serialized_hashes = records.map(&:inspect) # ["{ID: 'Boaty'...", ...]
unserialized = serialized_hashes.map { |s| eval(s) }
0 голосов
/ 24 сентября 2018

Надеюсь, это поможет.

li = []
records.each do |rec|
    rec.each do |k,v|
      li << "#{k.to_s},#{v.to_s}".to_s
    end
end

print li

["ID, BOATY", "Имя, McBoatface, Boaty", "ID, TRAINY", "Имя, McTrainface, Trainy"]

0 голосов
/ 24 сентября 2018
records.flat_map(&:to_a).map { |a| a.join(',') }
#=> ["ID,BOATY", "Name,McBoatface, Boaty", "ID,TRAINY", "Name,McTrainface, Trainy"]
0 голосов
/ 24 сентября 2018
records = [
  {
    ID: 'BOATY',
    Name: 'McBoatface, Boaty'
  },
  {
    ID: 'TRAINY',
    Name: 'McTrainface, Trainy'
  }
]


# strait forward code
result= []
records.each do |hash|
  hash.each do |key, value|
    result<< key.to_s
    result<< value
  end
end
puts result.inspect

# a rubyish way (probably less efficient, I've not done the benchmark)
puts records.map(&:to_a).flatten.map(&:to_s).inspect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...