Не работает вложенный цикл. Котлин

не совсем понимаю как работают вложенные циклы, у меня есть задача, нужно объединить два массива в map с помощью цикла for, в моем коде вложенный цикл не работает, выходит только так {KG=+98, RU=+98, USA=+98, TR=+98}

var myMap: MutableMap<String, String>? = null

fun main(){

    val names = arrayOf("KG","RU", "USA", "TR")

    val codes = arrayOf("+996", "+7", "+1", "+98")

    myMap = mutableMapOf()

    for (name in names) {
        for (code in codes){
            myMap!![name] = code
        }
    }
    println(myMap)
    println(myMap!!["KG"])

}

Ответы (1 шт):

Автор решения: Вася Воронцов

Всё у вас работает так, как вы и написали: каждому имени (name) последовательно ставятся в соответствие все коды (code), а сохраняется, т.е. ничем не замещается, последний код.

Пример вашей логики на js:

names = ["a", "b", "c", "d"];
codes = ["0", "1", "2", "3"];

obj = {};

for (let name of names) {
    for (let code of codes) {
        obj[name] = code;
    }
}

console.log(obj);

Вместо этого вам нужно ставить в соответствие только элементы с одинаковым индексом, т.е.:

for (i in names.indices) {
    myMap!![names[i]] = codes[i];
}

Пример работы новой логики на js:

names = ["a", "b", "c", "d"];
codes = ["0", "1", "2", "3"];
obj = {};

for (let i = 0; i < names.length; i++) {
    obj[names[i]] = codes[i];
}

console.log(obj);

→ Ссылка