как создать массив хешей, циклически перебирая массив объектов - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующий массив хэшей.Я пытаюсь зациклить его и создать массив хэша значений id и product_order_id.

objects = 
[
  #<Product: 0x00007ffd4a561108
  @id="1",
  @product_id="2",
  @product_order_id="23",
  @description="abc",
  @status="abcde",
  @start_date=nil,
  @end_date=nil>,
  #<Product: 0x00007ffd4a560c80
  @id="45",
  @product_id="22",
  @product_order_id="87",
  @description="ahef",
  @status="gesff",
  @start_date=nil,
  @end_date=nil>
......more objects.....
    ]

Вот как это должно выглядеть

[{ "1": "23" }, { "45": "87" }] -->its going to be uuid

Я пытался сделать это, ноне повезло

def mapped_product(objects)
    mapping = []
    objects.each do |object|
      mapping << {
        object.product_order_id: object.id
      }
    end
end

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

встроенное решение:

> Hash[objects.map{|p| [p.id, p.product_order_id] }]
# Output : [{ 1=>23 }, { 45=>87 }]
0 голосов
/ 04 декабря 2018

Я бы обычно реализовывал это, используя each_with_object

objects.each_with_object({}) { |obj, acc| acc[obj.id] = obj.product_order_id }

Если я действительно не хочу сжимать какую-то производительность, чем я бы пошел с ответом Гагана

0 голосов
/ 04 декабря 2018

Вы пробовали это?

def mapped_product(objects)
    mapping = []
    objects.each do |object|
      mapping << {
        object.id => object.product_order_id # I'm using an `=>` here
      }
    end
    mapping # return the new mapping
end

Я только что изменил : в хэше для =>, чтобы "сделать его динамическим", и поменял значения id и product_order_id

Вы также можете использовать map здесь:

def mapped_product(objects)
    objects.map do |object|
     {  object.id => object.product_order_id }
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...