为什么 Kotlins SortedMap 没有 .forEachIndexed() 函数?
Why has Kotlins SortedMap no .forEachIndexed() function?
Kotlins SortedMap
是“一个映射,进一步提供了对其键的总排序。”
因此,它应该是可索引的。但是,此扩展程序不存在
`sortedMap.forEachIndexed()`
为什么不呢?我忽略了什么吗?是性能原因吗?没有人打扰吗?
(是的,我知道,我可以使用 List>,但这对我的用例来说感觉不像是“直观”结构,地图更适合)
forEachIndexed
是各种 Array
和 Iterable
的扩展函数。 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()
创建了一个新对象。
Kotlins SortedMap
是“一个映射,进一步提供了对其键的总排序。”
因此,它应该是可索引的。但是,此扩展程序不存在
`sortedMap.forEachIndexed()`
为什么不呢?我忽略了什么吗?是性能原因吗?没有人打扰吗?
(是的,我知道,我可以使用 List
forEachIndexed
是各种 Array
和 Iterable
的扩展函数。 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()
创建了一个新对象。