Создать массив на основе двух других

У меня есть два массива:

[["106373", "106374", "106375", "106376"], ["106377", "106378", "220183", "220184"], ["220185", "220186", "220187", "220188"], ["220189", "220190", "106379"]]
[["106373", 15],
 ["106374", 16],
 ["106375", 17],
 ["106376", 18],
 ["106377", 19],
 ["106378", 20],
 ["106379", 77],
 ["220183", 38],
 ["220184", 39],
 ["220185", 40],
 ["220186", 41],
 ["220187", 42],
 ["220188", 43],
 ["220189", 44],
 ["220190", 76]]

Мне нужно вернуть массив, равный первому, но элементы которого заменены числом во втором с тем же значением. Ожидаемый результат:

[[15, 16, 17, 18], [19, 20, 38, 39], [40, 41, 42, 43], [44, 76, 77]]

Я пробовал много циклов с такими методами, как select и map, но безуспешно.

Пожалуйста, добавьте к вопросу последний подход, который вы пробовали.

dbugger 23.04.2024 22:05

«Я пробовал много циклов с такими методами, как select и Map, но безуспешно» — включите свой код в следующий раз. Понимание того, почему ваш подход не сработал, может оказаться более ценным, чем просить кого-то другого написать его с нуля.

Stefan 24.04.2024 08:18
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сначала преобразуйте второй список в хеш, чтобы ускорить поиск. Затем дважды вызовите карту в исходном списке и найдите значение:

lists = [["106373", "106374", "106375", "106376"], ["106377", "106378", "220183", "220184"], ["220185", "220186", "220187", "220188"], ["220189", "220190", "106379"]]

mapping = [
  ["106373", 15],
  ["106374", 16],
  ["106375", 17],
  ["106376", 18],
  ["106377", 19],
  ["106378", 20],
  ["106379", 77],
  ["220183", 38],
  ["220184", 39],
  ["220185", 40],
  ["220186", 41],
  ["220187", 42],
  ["220188", 43],
  ["220189", 44],
  ["220190", 76]
]

hash = mapping.to_h

p lists.map { |list| list.map { hash[_1] } }

Выход:

[[15, 16, 17, 18], [19, 20, 38, 39], [40, 41, 42, 43], [44, 76, 77]]

Примечание. Если значение не существует в сопоставлении, в результирующем выводе вы получите ноль.

Это было прекрасно. В моем случае всегда будет соответствующее значение, поэтому нулей нет. Большое спасибо.

Flávio 23.04.2024 22:11
lists.map { |list| list.map { hash[_1] } } можно преобразовать в lists.map { |list| hash.values_at(*list) }
engineersmnky 23.04.2024 22:46

Вы также можете использовать assoc для достижения того же результата без преобразования mapping в хеш (имея в виду, что в mapping всегда есть соответствующие значения):

lists = [["106373", "106374", "106375", "106376"], ["106377", "106378", "220183", "220184"], ["220185", "220186", "220187", "220188"], ["220189", "220190", "106379"]]
mapping = [["106373", 15], ["106374", 16], ["106375", 17], ["106376", 18], ["106377", 19], ["106378", 20], ["106379", 77], ["220183", 38],["220184", 39], ["220185", 40], ["220186", 41], ["220187", 42], ["220188", 43], ["220189", 44], ["220190", 76]]

lists.map { |list| list.map { mapping.assoc(_1)[1]  }  }
# => [[15, 16, 17, 18], [19, 20, 38, 39], [40, 41, 42, 43], [44, 76, 77]]

Другие вопросы по теме