首页 > 解决方案 > 在 Kotlin 中删除和检索 MutableSet 的元素

问题描述

可以以某种方式缩短以下示例:

val set = mutableSetOf(1, 2, 3, 4, 5)
val x = set.first()
set.remove(x)

换种方式问:Kotlin 是否有类似于栈的pop的操作?一个返回并删除元素?

标签: kotlincollectionsset

解决方案


好像没有这样的方法。

当然,您可以使用以下结构在一行中完成此操作:

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 ——但这也不会给您提供弹出操作。


推荐阅读