android - 在 kotlin 中,如何调用之前在 when 中创建的变量?

标签 android kotlin

我正在尝试列出随机列表的前 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/

相关文章:

android - 处理问题 "javax/xml/parsers/DocumentBuilder.class": Ill-advised or mistaken usage of a core class (java. * 或 javax.*)

android - 如何使用 Coil 从 URL 获取位图?

android - Google/Facebook 登录 MVVM

kotlin - 如何从for到Stream干净整洁(Kotlin)

android - 在xml中的单个TextView中添加两个R.id

android - volley.VolleyError.NetworkError 在 android 中到底是什么意思?

java - 如何将两个位图合并到另一个位图

java - SQLite 表返回空日期

kotlin - kotlin 中的函数重载问题

jackson - Jackson反序列化-Kotlin数据类-每个映射器缺少字段的默认值