У меня есть два массива, например:
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")
)
Во-первых, нам нужно создать карту поиска для второго списка, чтобы мы могли легко искать свойство по его идентификатору. Затем мы можем использовать его при преобразовании первого списка:
val prop2ById = array2.associate { it[0] to it[1] }
val array3 = array1.map { it + arrayOf(prop2ById.getOrDefault(it[0], "NO MATCH")) }
Я предполагаю, что идентификатор во втором массиве уникален.
Кроме того, кажется, что вы представляете объекты как массивы. Если каждый столбец имеет смысл, это означает очень конкретную часть данных, мы должны представлять это не как массив, а как объект или, возможно, карту. Использование массивов здесь гораздо более подвержено ошибкам и плохо сказывается на качестве кода в целом.
Этот it + arrayOf
существует только потому, что в исходном примере данные хранились в массивах, поэтому мы могли добавить еще один столбец, просто объединив два массива. Если мы используем классы данных, то нам нужен еще один класс для хранения всех 4 столбцов, и тогда мы должны использовать его: случаях я лично предпочитаю отдельные классы, даже если это требует дополнительного кода.
Привет брут, спасибо за ответ. Переделал код на основе предоставленной вами информации: ссылка К сожалению не работает из-за несоответствия типа данных. Я пробовал разные типы, такие как Map, List, Array и т. д. - ничего не работает. Что не так?