我对这个片段有问题
fun main() {
val list = MutableList(5)
{
4
}
println(list)
}
该片段将打印[4, 4, 4, 4, 4]
和
fun main() {
val list = MutableList(5)
{
index -> 4 + index
}
println(list)
}
该片段将打印[4,5,6,7,8]
我想问的是,这可能非常非常愚蠢。如果我们使用与上面相同的代码段,是否有一种方法可以制作一个自定义列表,如[4, 6, 7, 9, 10]
我尝试使用[4, 6, 7, 9, 10]
、(4, 6, 7, 9, 10)
、4, 6, 7, 9, 10
或4; 6; 7; 9; 10
,但都不起作用。
如果我使用4; 6; 7; 9; 10
,列表将打印
[10, 10, 10, 10, 10]
如果有人愿意帮忙,下面的这个片段就是不起作用
fun main() {
val list = MutableList(5)
{
//[4, 6, 7, 9, 10]
//(4, 6, 7, 9, 10)
//4, 6, 7, 9, 10
4; 6; 7; 9; 10
}
println(list)
}
如果您想要一个只有4, 6, 7, 9, 10
的可变列表,最直接的方法是使用mutableListOf
:创建它
val list = mutableListOf(4, 6, 7, 9, 10)
这将创建一个大小为5的MutableList
,其值为4、6、7、9、10。除非要进行某种计算,或者所有元素都相同,否则不需要使用索引lambda构造来创建它。
您已经得到了几个答案,告诉您如何使用listOf
/mutableListOf
显式定义列表,并且您已经用链接(我无法访问它(回复了他们,并询问了如何从标准输入中读取。我假设这意味着你的问题没有得到回答,你正在努力澄清你在问什么,所以我会在你的回复中解释代码中发生了什么,以防这有助于澄清问题。
// on each line single numbers from 1 to 5
val numbers = MutableList(5) { readln().toInt() }
println(numbers) // [1, 2, 3, 4, 5]
MutableList(5) { //some function }
是一个列表生成器函数(此处为文档(-第一个参数是要生成的列表的大小。
第二个参数是被调用以生成每个项的函数。它有一个单独的参数(通常称为it
,除非您重命名它(,它包含正在生成的项的索引。您可以使用它根据值在列表中的位置生成值,例如奇数列表的(it * 2) + 1
。
但您不必使用索引值-您可以为每个项目生成一个静态值,或者从任何您喜欢的地方提取数据来提供值。这就是readln()
正在做的事情——每当函数运行以生成五个项目中的一个时,它都会从标准输入中读取一行。您还可以从Iterator
中提取下一个项,从Random
生成器中读取值,从API请求一些东西——无论您想要什么。重要的是返回一个值,因此函数中的代码充当一个表达式,并返回一个用作列表中项目的值。
所以,如果你真的想,你可以这样做:
// using an iterator because it has state, i.e. it remembers where it's up to in the list
val stuff = listOf("1", "4", "6", "7", "2").iterator()
fun main() {
val myList = List(5) { stuff.next().toInt() }
println(myList)
}
它的功能与从标准输入中读取相同,只是它轮询stuff
迭代器以获取值。
如果您仔细查看数字序列:4, 6, 7, 9, 10
您可以看到,在第一个值和第二个值之间有一个2的delta。在第二个和第三个值之间有一个1的增量。然后又是一个2的德尔塔,依此类推。
你可以用创建这样的列表
val list = MutableList(5)
{
index -> 4 + index + (index and 1) + (index / 2)
}
哪个将生成
4 + 0 + (0 and 1) + (0 / 2) == 4 + 0 + 0 + 0 == 4
4 + 1 + (1 and 1) + (1 / 2) == 4 + 1 + 1 + 0 == 6
4 + 2 + (2 and 1) + (2 / 2) == 4 + 2 + 0 + 1 == 7
... etc ...