gpt4 book ai didi

kotlin - 减少嵌套循环的可能性

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

在创建所有可能的列表时,我想绕过几个 for 循环的深度嵌套 Transformations .

现在,使用此代码块:

val allTransformations = ArrayList<Transformation>().apply {
for (moveZ in 0..4)
for (moveY in 0..4)
for (moveX in 0..4)
for (rotateZ in 0..3)
for (rotateY in 0..3)
for (rotateX in 0..3)
add(Transformation(rotateX, rotateY, rotateZ, moveX, moveY, moveZ))
}

虽然这很简单,但我想知道 Kotlin 是否提供其他工具来在一行中编写它。

我想用更少的代码检索相同的列表,看看这是否会减少困惑。

最佳答案

可以通过以下方式调用此解决方案:

loopOverRanges(0..4, 0..4, 0..4, 0..3, 0..3, 0..3) { result ->
// result[0], result[1], result[2], result[3], result[4], result[5]
}

这是这样定义的:
fun loopOverRanges(
vararg ranges: IntRange,
function: (IntArray) -> Unit
) {
val result = IntArray(ranges.size) { index -> ranges[index].first }

val productOfRangeLengths = ranges
.map { it.toList().size }
.product()

for (i in 0 until productOfRangeLengths) {
function(result)

result[0] += ranges[0].step
for (rangeIndex in 0 until ranges.size - 1) {
if (result[rangeIndex] == ranges[rangeIndex].last) {
result[rangeIndex] = ranges[rangeIndex].first
result[rangeIndex + 1] += ranges[rangeIndex].step
}
}
}
}

如果这提高了可读性,至少可以说是值得怀疑的。它消除了嵌套的需要,这对于大量的范围很有用。它不能立即识别我最初的嵌套循环;它还隐藏命名参数,并在检索到 result[TOO_HIGH_INT] 时可能会抛出 IndexOutOfBounds。

这是一个有趣的小调查,但我倾向于不使用它。

关于kotlin - 减少嵌套循环的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57271396/

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