如何计算Kotlin中的更换次数?
以下是我正在做的:如何计算Kotlin中的更换次数?,kotlin,Kotlin,以下是我正在做的: val a = listOf("foo bar", "foo bar baz", "bar", "bar") val b = a.count {it.contains("bar")} val aa = a.map { it.replace("bar", "baz") } var c = aa.count {it.contains("bar")} println("replaced: ${b-c}") 这似乎是没有效率的 顺便说一句,我发现我不能很容易地匹配Java/Kotl
val a = listOf("foo bar", "foo bar baz", "bar", "bar")
val b = a.count {it.contains("bar")}
val aa = a.map { it.replace("bar", "baz") }
var c = aa.count {it.contains("bar")}
println("replaced: ${b-c}")
这似乎是没有效率的
顺便说一句,我发现我不能很容易地匹配Java/Kotlin正则表达式中的空格,只是说。好的,这里有一个建议:
将列表划分为包含“bar”的元素和不包含“bar”的元素。获取第一个集合并替换相应的元素(也计算它们),然后添加回其他元素(不包含“bar”)
下面是分区的作用:
c不总是0吗?是什么阻止您对空白字符使用\s?很抱歉,回复晚了,这是午夜,富有创意和启发性,只是有点复杂,可能应该使用手动替换为循环。谢谢
val a = listOf("foo bar", "foo bar baz", "bar", "bar")
var replaced = 0
val replacedList = a.partition { it.contains("bar") }.let {
it.first.map { it.replace("bar", "baz") }.also { replaced = it.size } +
it.second
}
println(replaced) //4
println(replacedList) //[foo baz, foo baz baz, baz, baz]
inline fun <T> Iterable<T>.partition(
predicate: (T) -> Boolean
): Pair<List<T>, List<T>> (source)
val replacedList = a.partition { it.contains("bar") }.let { partitions ->
partitions.first.map { it.replace("bar", "baz") }.also {
replaced = partitions.first.flatMap { it.split(" ") }.count { it.contains("bar") }
} + partitions.second
}