代码之家  ›  专栏  ›  技术社区  ›  craig

序列化哈希数组

  •  1
  • craig  · 技术社区  · 7 年前

      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"}]
    

    格式化(即。 ["Key0,Value0","Key1,Value1",...] 需要匹配供应商的接口。

    **/编辑**

    我错过了什么?

    4 回复  |  直到 7 年前
        1
  •  3
  •   Andrey Deineko    7 年前
    records.flat_map(&:to_a).map { |a| a.join(',') }
    #=> ["ID,BOATY", "Name,McBoatface, Boaty", "ID,TRAINY", "Name,McTrainface, Trainy"]
    
        2
  •  2
  •   Thomas    7 年前
    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
    
        3
  •  1
  •   Arihant    7 年前

    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”,“Name,McBoatface,BOATY”,“ID,TRAINY”,“Name,McTrainface,

        4
  •  0
  •   Nondv    7 年前

    你确定要这样做吗?

    退房 Marshal . 或者 JSON

    你甚至可以用这种愚蠢的方式 Hash#inspect eval :

    serialized_hashes = records.map(&:inspect) # ["{ID: 'Boaty'...", ...]
    unserialized = serialized_hashes.map { |s| eval(s) }
    
    推荐文章