将列表添加到另一个列表的末尾

时间:2020-06-20 09:19:34

标签: kotlin

我正在编写一段代码,需要在其中添加一个列表到另一个列表。

fun a(x:Int):List<List<Int>>{
  var a = 1.rangeTo(x);
  var b: List<List<Int>> = emptyList();
  for (i in a){
    var num1 = if(i<=3) i else 4;
    var list_a= 0.rangeTo(num1 - 1);
    b.add(list_a);
  }
  return b
}

我的问题是b.add(list_a)在给error(unresolved reference)

在此功能中,如果我输入println(a(2)) 输出应为[[0],[0,1]] 请帮忙。

1 个答案:

答案 0 :(得分:3)

unresolved reference获取b.add()的原因是因为您已将b初始化为List而不是MutableList < / strong>。

请注意,一旦初始化,您就可以将元素添加到Kotlin中的MutableList而不是List 中。因此,将b的初始化更改为var b: MutableList<List<Int>> = mutableListOf()

fun a(x: Int): List<List<Int>> {
    var a = 1.rangeTo(x)
    var b: MutableList<List<Int>> = mutableListOf()
    for (i in a) {
        var num1 = if (i <= 3) i else 4
        var list_a = 0.rangeTo(num1 - 1).toList()
        b.add(list_a)
    }
    return b
}

进一步重构它,您可以在循环1..x中使用for并使用(0 until num1)代替下面的0.rangeTo(num1 - 1)

fun a(x: Int): List<List<Int>> {
    val listB: MutableList<List<Int>> = mutableListOf()
    for (i in 1..x) {
        val num1 = if (i <= 3) i else 4
        val listA = (0 until num1).toList()
        listB.add(listA)
    }
    return listB
}