Как объединить два массива по ID в Котлине?

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

val array1 = arrayOf(
  arrayOf("001", "Product name", "Product group"),
  arrayOf("002", "Product name", "Product group"),
  arrayOf("003", "Product name", "Product group"),
  arrayOf("004", "Product name", "Product group"),
  arrayOf("005", "Product name", "Product group")
)

val array2 = arrayOf(
  arrayOf("001", "Property1"),
  arrayOf("002", "Property2"),
  arrayOf("004", "Property4")
)

Как я могу объединить оба массива в один, используя идентификатор (первый столбец)? Таблица результатов (массив или изменяемый список) должна содержать ВСЕ столбцы из array1 и соответствовать только результатам из array2 из второго столбца. Это должно выглядеть как следующая структура:

val array3 = arrayOf(
  arrayOf("001", "Product name", "Product group", "Property1"),
  arrayOf("002", "Product name", "Product group", "Property2"),
  arrayOf("003", "Product name", "Product group", "NO MATCH"),
  arrayOf("004", "Product name", "Product group", "Property4"),
  arrayOf("005", "Product name", "Product group", "NO MATCH")
)
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Во-первых, нам нужно создать карту поиска для второго списка, чтобы мы могли легко искать свойство по его идентификатору. Затем мы можем использовать его при преобразовании первого списка:

val prop2ById = array2.associate { it[0] to it[1] }
val array3 = array1.map { it + arrayOf(prop2ById.getOrDefault(it[0], "NO MATCH")) }

Я предполагаю, что идентификатор во втором массиве уникален.

Кроме того, кажется, что вы представляете объекты как массивы. Если каждый столбец имеет смысл, это означает очень конкретную часть данных, мы должны представлять это не как массив, а как объект или, возможно, карту. Использование массивов здесь гораздо более подвержено ошибкам и плохо сказывается на качестве кода в целом.

Привет брут, спасибо за ответ. Переделал код на основе предоставленной вами информации: ссылка К сожалению не работает из-за несоответствия типа данных. Я пробовал разные типы, такие как Map, List, Array и т. д. - ничего не работает. Что не так?

Clipart - Designer 04.01.2023 21:52

Этот it + arrayOf существует только потому, что в исходном примере данные хранились в массивах, поэтому мы могли добавить еще один столбец, просто объединив два массива. Если мы используем классы данных, то нам нужен еще один класс для хранения всех 4 столбцов, и тогда мы должны использовать его: случаях я лично предпочитаю отдельные классы, даже если это требует дополнительного кода.

broot 04.01.2023 23:08

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