Как создать большой хэш с минимальным кодом - PullRequest
0 голосов
/ 05 февраля 2019

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

hash_1 = {
  a: {
    category_1: {
      length: a["category_1"].length, 
      amount: category_1_a_total,
      speed: category_1_a_speed
    },
    category_2: {
      length: a["category_2"].length, 
      amount: category_2_a_total,
      speed: category_2_a_speed
    }
  },
  # ~ 10 more hashes to follow b..i
 }

У меня есть полный шаблон хэша, который большой и делает код труднее для чтения,Есть ли способ выполнить итерацию по каждому из вложенных хешей при сборке hash_1, а затем передать необходимые переменные в каждую итерацию вложенных хешей?

1 Ответ

0 голосов
/ 05 февраля 2019

FWIW, следующий код должен делать то, что вы просили.Тем не менее, все комментарии о том, что вы делаете неправильно, действительно очень правильны.

Я публикую фрагмент только для образовательных целей.

b = binding
hash =
  (?a..?i).map do |key|
    [
      key.to_sym,
      (1..2).map do |i|
        [
          :"category_#{i}",
          {
            length: b.local_variable_get(key)["category_#{i}"].length,
            amount: b.local_variable_get("category_#{i}_#{key}_total"),
            speed: b.local_variable_get("category_#{i}_#{key}_speed")
          }
        ]
      end.to_h
    ]
  end.to_h

Код не проверен, но он должен работать "из коробки".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...