我正在尝试列出随机列表的前 100 个。我告诉它如果列表为 0 则进行洗牌,然后递增。然后我尝试在“时间”的另一部分中调用该列表,但它不起作用。我怎样才能做到这一点?
when (countF) {
0 -> {
//shuffle at 0
val randomChaos = chaosList.asSequence().shuffled().take(chaosList.count()).toList()
cResult.text = randomChaos.elementAt(countF) + countF + "\n\n\n\n\n\n\n\n" + this.cResult.text
countF++
}
1-99 -> {
//show 1-99
cResult.text = randomChaos.elementAt(countF) + countF + "\n\n\n\n\n\n\n\n" + this.cResult.text
countF++
}
100 -> countF = 0
最佳答案
您需要创建 val randomChaos
在when
之前使其在 when
的多个分支范围内可用。声明。
也就是说,获取随机元素的方式非常复杂。 take(chaosList.count())
是完全多余的。而且由于您不使用多个序列运算符,因此创建序列也是多余的。最后,您仅从随机列表中提取单个项目,因此无需首先创建随机列表。使用elementAt()
在打乱的列表上与从打乱的列表中选择任何元素没有什么不同,或者只是从根本没有打乱的列表中随机选择一个项目。
此外,您的 when
的前两个分支语句当前会产生完全相同的结果,因此可以合并它们。
根据您的描述,我猜您在一个循环内有这个when语句,该循环尝试运行它100次,以便您可以列出所有项目。为此,您需要在循环外对列表进行一次洗牌,然后您可以在循环中迭代其元素。
但是,有些功能可以让您更轻松地执行您的建议。这是一个例子:
val randomChaos = chaosList.shuffled()
cResult.text = randomChaos.asSequence()
.take(100)
.withIndex()
.joinToString("\n") { (i, value) ->
"$value-$i"
}
在这种情况下,使用序列有助于避免创建中间列表来保存前 100 个值。
关于android - 在 kotlin 中,如何调用之前在 when 中创建的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71311394/