为什么 Kotlins SortedMap 没有 .forEachIndexed() 函数?

Why has Kotlins SortedMap no .forEachIndexed() function?

Kotlins SortedMap 是“一个映射,进一步提供了对其键的总排序。”

因此,它应该是可索引的。但是,此扩展程序不存在

`sortedMap.forEachIndexed()`

为什么不呢?我忽略了什么吗?是性能原因吗?没有人打扰吗?

(是的,我知道,我可以使用 List>,但这对我的用例来说感觉不像是“直观”结构,地图更适合)

forEachIndexed 是各种 ArrayIterable 的扩展函数。 SortedMap 与这些类型无关,因此您不能对其调用 forEachIndexed

但是,SortedMap 确实有 asIterable(继承自 Map),这会将其转换为 Iterable。之后,您可以访问 forEachIndexed:

someSortedMap.asIterable().forEachIndex { index, entry ->
    // ...
}

但是,较新的扩展函数 onEachIndexed Map 上声明的。与 forEachIndexed 不同,这也是 returns 地图本身。

大多数具有 forEachIndexed 的东西要么从 Iterable 中获取,要么将其作为扩展功能。 Map 没有,但是它的一个属性,entries 实际上是一个 Set,它确实有 forEachIndexed,因为它继承自 Collection(继承自Iterable).

这意味着您可以这样做:

map.entries.forEachIndexed { index, (key, value) ->
        //do stuff
}

我将此添加到已经存在的 asIterable().forEachIndex 答案中的原因是因为 asIterable() 创建了一个新对象。