gpt4 book ai didi

python-3.x - Kotlin 中的嵌套理解

转载 作者:行者123 更新时间:2023-12-02 01:03:49 25 4
gpt4 key购买 nike

假设我有以下嵌套 for 循环:

val test = mutableSetOf<Set<Int>>()
for (a in setA) {
for (b in setB) {
if (a.toString().slice(2..3) == b.toString().slice(0..1)) {
test.add(setOf(a,b))

}
}
}

在python中,我可以做一个简单的理解

test = {[a,b] for a in setA for b in setB if a.str()[2:3] == b.str[0:1]}

我很难将其转换为 Kotlin 语法。我知道对于带有条件的单个 for 循环,我可以使用 filtermap 来获得所需的结果(使用习惯用法:newSet = oldSet.filter{ conditional }.map { it },但我实在想不出如何以这种方式进行嵌套。

最佳答案

这是 IDEA 提出的:

for (a in setA)
setB
.filter { a.toString().slice(2..3) == it.toString().slice(0..1) }
.mapTo(test) { setOf(a, it) }

我认为没有什么可做的。我认为它们不是类似于 Python 的原生方法,但它实际上在长度方面已经非常相似,因为只有函数和它们的名称使它那么长。

如果我们看一下这个假设的例子:

for (a in setA) setB.f { a.t().s(2..3) == it.t().s(0..1) }.m(test) { setOf(a, it) }

离Python例子不远了。 Python 语法非常不同。

(该假设的函数)

fun <T> Iterable<T>.f(predicate: (T) -> Boolean) = filter(predicate)

fun String.s(range: IntRange) = slice(range)

fun <T, R, C : MutableCollection<in R>> Iterable<T>.m(destination: C, transform: (T) -> R) = mapTo(destination, transform)

fun Int.t() = toString()

关于python-3.x - Kotlin 中的嵌套理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com