微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以将 Map 迭代器设置到 Kotlin 中的某个位置?

如何解决是否可以将 Map 迭代器设置到 Kotlin 中的某个位置?

假设我有一个地图:Map<Int,String>,我知道这个地图是如何创建的,并且它保留了迭代顺序。如何迭代给定范围内的所有元素?

val map: Map<Int,String> = mapOf(
    1 to "one",2 to "two",3 to "three",4 to "four")

// Let's say I want to get all values after key 3.

val iterator = map.iterator()
while (iterator.next().key != 3) {}
val itemsAfter3 = iterator.asSequence().map { it.value }

除了丑之外,就是O(n)。有没有更好、更优雅、更高效的方式?

我正在考虑用 map.keys.indexOf() 做点什么,但这里的复杂性似乎也是线性的。

解决方法

永远不要依赖内部实现,将来可能会更改。如果您需要在迭代期间保留插入顺序的地图,请明确声明:

val map: Map<Int,String> = linkedMapOf(
    1 to "one",2 to "two",3 to "three",4 to "four"
)

获取特定索引后的所有值很容易:

val valuesAfterIndex3 = map.values.drop(3)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。