如何将MutableList添加到其他MutableList-Kotlin?

时间:2020-07-24 12:15:44

标签: kotlin mutablelist

下午好,亲爱的StackOverflow社区,

我在Kotlin中使用MutableList遇到问题。更具体地说,我没有成功在MutableList内添加MutableList

例如,后面的例子

fun main() {

    var mutableListIndex: MutableList<Int> = mutableListOf<Int>()
    var mutableListTotal: MutableList<MutableList<Int>> = mutableListOf<MutableList<Int>>()

    for(i in 0..5) {
        mutableListIndex.add(i)
        println(mutableListIndex)

        mutableListTotal.add(mutableListIndex)
        println(mutableListTotal)

    }
}

我得到以下结果

[0]
[[0]]
[0, 1]
[[0, 1], [0, 1]]
[0, 1, 2]
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
[0, 1, 2, 3]
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
[0, 1, 2, 3, 4]
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
[0, 1, 2, 3, 4, 5]
[[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]]

虽然,我希望此后结果

[0]
[[0]]
[0, 1]
[[0], [0, 1]]
[0, 1, 2]
[[0], [0, 1], [0, 1, 2]]
[0, 1, 2, 3]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
[0, 1, 2, 3, 4]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
[0, 1, 2, 3, 4, 5]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5]]

我无法理解我错了,因为从严格的算法角度来看,代码是好的。

有人可以帮我解释我的错误吗?

您忠实地

2 个答案:

答案 0 :(得分:1)

按照上面的阿米什什·萨胡爵士的建议,我终于遵循了以下解决方案:

fun main() {

    var mutableListIndex: MutableList<Int> = mutableListOf<Int>()
    var mutableListTotal: MutableList<MutableList<Int>> = mutableListOf<MutableList<Int>>()

    for(i in 0..5) {


        mutableListIndex.add(i)
        println(mutableListIndex)


        mutableListTotal.add(mutableListIndex.toMutableList())
        println(mutableListTotal)

    }
}

给哪个:

[0]
[[0]]
[0, 1]
[[0], [0, 1]]
[0, 1, 2]
[[0], [0, 1], [0, 1, 2]]
[0, 1, 2, 3]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
[0, 1, 2, 3, 4]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
[0, 1, 2, 3, 4, 5]
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4, 5]]

非常感谢您的及时答复和帮助

您忠实地

答案 1 :(得分:0)

您始终传递与json["errors"]["code"].array?.compactMap { $0.string } ?? [] 相同的引用,以将其添加到mutableListIndex中。因此,在每个位置上您都有相同的对象。

然后,将新项目添加到第一个列表中,对该项目的每个引用都指向更新后的列表,还有一个项目。

要获得一个独立的对象,该对象在每次更新第一个引用时都不会更新,因此您首先需要创建List的副本,然后仅将副本添加到第二个List中。这样,对初始列表的更新将不会反映在第一个列表的副本中。

mutableListTotal