2016-03-27 3 views
1

У меня есть массив хэшей, порожденных mapRoR строка из массива

arr = current_order.order_items.map{|oi|[{name:oi.name,price:oi.price}] 

[{:name=>"Jacket", :price=>300}, 
{:name=>"Bag", :price=>650 }, 
{:name=>"Suit", :price=>300}].to_s 

мне нужно сделать строку из него, как этот

name: Jacket,price:300 
name: Bag,price:650 
name: Suit,price:300 

Что я сделал это gsub каждый нужен элемент, как gsub(':size=>','size:')

, но это выглядит очень уродливо

нужно более удобное решение для этого

ответ

2

Если ключи предопределены:

arr.map { |item| "name:#{ item[:name] }, price:#{ item[:price] }" }.join("\n") 

Если нет:

arr.map { |item| item.map { |k, v| "#{ k }:#{ v }" }.join(', ') }.join("\n") 
3

Вы могли бы сделать что-то вроде:

  1. Определим функцию на хеш, чтобы печатать его для вас.
  2. map над массивом, чтобы получить довольно печатные строки для каждого.

    def pretty_print(hash) 
        hash.map {|key, value| "#{key}: #{value}"}.join(', ') 
    end 
    arr.map {|hash| pretty_print(hash)} 
    
Смежные вопросы