【问题标题】:Make an ArrayList whose attributes have ArrayList too制作一个属性也有 ArrayList 的 ArrayList
【发布时间】:2020-07-15 18:24:41
【问题描述】:

我在制作属性也具有 ArrayList 的数据 ArrayList 时遇到问题。模型数据看起来像这样的代码。

data class DataArrayInArray02(
    val no: Int? = null,
    val dataArray: ArrayList<Int>
)

我想得到这样的数据DataArrayInArray02

这是我的代码

fun main() {
    val dataArrayInArray = ArrayList<DataArrayInArray02>()
    val dataChildrenArray = ArrayList<Int>()

    for (i in 0..3) {
        val data = (0..10).random()
        for (j in 0..data) {
            val d = (1..1000).random()
            dataChildrenArray.add(d)
        }
        dataArrayInArray.add(DataArrayInArray02(i+1, dataChildrenArray))
        println("ID : ${dataArrayInArray[i].no}, Data : ${dataArrayInArray[i].dataArray}")
        dataChildrenArray.clear()
    }
}

当我运行这段代码时,我得到了如上图所示的结果。

我调用 dataArrayInArray 使用循环“for”看起来像这样。

for (j in 0 until dataArrayInArray.size) {
        println("ID : ${dataArrayInArray[j].no}, Data : ${dataArrayInArray[j].dataArray}")
    }

但是,我得到这样的结果。

那么,哪个代码不正确?是因为使用了 dataChildrenArray.clear() 吗?如果我删除该代码。结果会是这样:

ID : 1, Data : [915, 565, 591, 254, 67]
ID : 2, Data : [915, 565, 591, 254, 67, 258, 57, 767, 866, 986, 558, 187, 976]

其中 ID 2 应仅显示数据 [258, 57, 767, 866, 986, 558, 187, 976]。

如何解决这个问题?

【问题讨论】:

  • 这不是java

标签: for-loop kotlin arraylist


【解决方案1】:

您将ArrayList&lt;Int&gt; 的相同实例传递给顶级列表中DataArrayInArray02 的每个实例。要修复您的代码,请移动该行

val dataChildrenArray = ArrayList<Int>()

在您的 for 循环中,为每个孩子创建一个新的。

如果您可以使用 List 而不是 ArrayList,则可以简化:

val dataArrayInArray = (1..4).map { i ->
        val innerListSize = (0..10).random()
        val innerList = (0..innerListSize).map { (1..1000).random() }
        DataArrayInArray02(i, innerList)
    }

【讨论】:

  • 知道了。当我在这种情况下使用“地图”时,它会起作用。谢谢,@Tenfour04。我认为这种情况下使用“map”比循环“for”更好。因为我很少使用“地图”,所以我不知道这种情况可以使用“地图”,这是最佳实践。非常感谢:)。
猜你喜欢
  • 2020-09-24
  • 2019-11-20
  • 1970-01-01
  • 2021-09-14
  • 2015-03-15
  • 1970-01-01
  • 2020-11-21
  • 2012-03-28
  • 2011-06-16
相关资源
最近更新 更多