Есть ли более эффективный способ рефакторинга итерации ha sh на ruby? - PullRequest
1 голос
/ 06 марта 2020

У меня есть итерация здесь:

container = []
summary_data.each do |_index, data|
  container << data
end

Структура summary_data приведена ниже:

summary_data = {
  "1" => { orders: { fees: '25.00' } },
  "3" => { orders: { fees: '30.00' } },
  "6" => { orders: { fees: '45.00' } }
}

Я хочу удалить клавишу цифры c, например: , "1", "3".

И я ожидаю получить следующее container:

[
  {
    "orders": {
      "fees": "25.00"
    }
  },
  {
    "orders": {
      "fees": "30.00"
    }
  },
  {
    "orders": {
      "fees": "45.00"
    }
  }
]

Есть ли более эффективный способ рефакторинга кода выше?

Благодарю за любую помощь.

Ответы [ 3 ]

4 голосов
/ 06 марта 2020

Вы можете использовать метод Hash#values, например:

container = summary_data.values
1 голос
/ 06 марта 2020

Если все внутренние хеши имеют одинаковую структуру, единственной интересной информацией являются сборы:

summary_data.values.map{|h| h[:orders][:fees] }
# => ["25.00", "30.00", "45.00"]

Если вы хотите провести некоторые вычисления с этими сборами, вы можете преобразовать их в числа:

summary_data.values.map{|h| h[:orders][:fees].to_f }
# => [25.0, 30.0, 45.0]

Возможно, даже лучше работать с центами как целыми числами, чтобы избежать любой ошибки с плавающей запятой:

summary_data.values.map{|h| (h[:orders][:fees].to_f * 100).round }
=> [2500, 3000, 4500]
0 голосов
/ 06 марта 2020

Вам нужен массив со значениями, предоставленными га sh. Вы можете получить методом значений напрямую. summary_data.values

...