kotlin - 在 Kotlin 中删除和检索 MutableSet 的元素
问题描述
可以以某种方式缩短以下示例:
val set = mutableSetOf(1, 2, 3, 4, 5)
val x = set.first()
set.remove(x)
换种方式问:Kotlin 是否有类似于栈的pop的操作?一个返回并删除元素?
解决方案
好像没有这样的方法。
当然,您可以使用以下结构在一行中完成此操作:
val x = set.first().also{ set.remove(it) }
你可以编写自己的扩展方法来做到这一点:
fun <T> MutableCollection<T>.removeFirst()
= first().also{ remove(it) }
或者(也许更有效):
fun <T> MutableCollection<T>.removeFirst()
= with(iterator()){ next().also{ remove() }}
标准库中还没有的原因可能是通常不认为集合是有序的。与任何集合一样,您可以遍历元素(这就是您可以调用 的原因first()
),但顺序与列表和堆栈的顺序不同,它不是集合结构的一部分。
如果顺序确实很重要,那么您可以考虑使用 aMutableList
代替;有一种removeAt()
方法可以满足您的需求。
如果您需要排序并且没有重复项,则linkedSetOf()
可以提供LinkedHashSet ——但这也不会给您提供弹出操作。
推荐阅读
- linux - 使用 gitlab 进行持续部署
- javascript - CKEditor - 如何获取模板属性
- clob - ORA-60019: 在范围大小为 8 的表空间中创建大小为 14 的初始范围
- c++ - 使用 DirectX 桌面框架的消费者-生产者线程
- django - 如何将 CreateView 中的表单(与通用内容类型连接到 detailview 中的模型)转换为 DetailView?
- julia - 朱莉娅和大数字
- r - 无法排除 Twitter Dataframe R 中的行
- laravel - 在路由中同时调用中间件和控制器方法
- java - Java Spring 一个类的多个节点
- dialogflow-es - 富媒体的意图行动