是否可以将 Map 迭代器设置到 Kotlin 中的某个位置?
Is it possible to set the Map iterator to a certain position in 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)
假设我有一张地图: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)