我在试着列出洗牌名单的前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发布于 2022-03-01 17:50:35
您需要在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个值。
https://stackoverflow.com/questions/71311394
复制相似问题