mapIndexed
返回List
而不是不是立即直观的数组。
我还注意到kotlin.collections.mapIndexed
documentation没有提到保留顺序,但是kotlin.sequences.mapindexed
却保留了。
我知道,由于在文档中没有明确说明,因此我不应该依赖它,而是想知道这是否是故意遗漏的原因。
答案 0 :(得分:0)
我认为这是一个遗漏,更改元素的顺序并不是那么实际,效果会很差。
顺序的执行至少可以保证该顺序,如下所示。 增强的for循环用于遍历整个集合,并将更改仅应用于相关索引。
它返回一个foo.browser.js
的事实是合乎逻辑的,因为只有获得所需的更改后,您才能获得相同的main.browser.js
(实际上是完整副本-但具有相同的对象)。 / p>
List
答案 1 :(得分:0)
官方Kotlin存储库的/libraries/stdlib/test/collections/IterableTests.kt(此时链接到Router
的最新修订版)上也保留了订单
master
[...]
abstract class IterableTests<T : Iterable<String>>(val createFrom: (Array<out String>) -> T, val empty: T) {
fun createFrom(vararg items: String): T = createFrom(items)
val data = createFrom("foo", "bar")
因此,测试还假定输出的顺序相同。顺便说一句,这很奇怪,因为此代码不仅用于测试 @Test
fun mapIndexed() {
val shortened = data.mapIndexed { index, value -> value.substring(0..index) }
assertEquals(2, shortened.size)
assertEquals(listOf("f", "ba"), shortened)
}
和其他代码,而且还用于测试无序List
。
类似的代码用于在所有类型的数组上测试Set
。
答案 2 :(得分:0)
订单保留在结果中。 在这里查看我的代码-更改列表中的第一项:
val convertedResults = mutableListOf<DisplayItem>()
myList.mapIndexedNotNullTo(convertedResults) { index, item ->
val member = DisplayItem(item)
if (member.id == "id_007") {
// add it first in the list
convertedResults.add(0, member)
null
} else
member
}
这很好。但是我不知道如何在这里衡量性能。告诉我您如何看待这段代码。