gpt4 book ai didi

arrays - Flatten 在直接调用和在方法中调用时的工作方式不同

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:10 26 4
gpt4 key购买 nike

我正在尝试编写一个方法,它将接受一个由字符 01? 组成的字符串,并返回由原始字符串表示的一组字符串,将 ? 作为通配符,可以是 01。例如,如果输入是 "011?0",则输出应该是 ["01100", "01110"]

我写了下面的代码:

def zerone str, arr
qs = str.count("?") - 1
i = 0
while i < str.length
if str[i] != "?"
arr << str[i]
i += 1
else
arr1 = Array.new(arr)
arr2 = Array.new(arr)
arr1 << "1"
arr2 << "0"
arr = [arr1, arr2]
arr.map! {|x| zerone(str[i+1..-1], x)}
break
end
end
arr.flatten(qs)
end

当我调用 zerone 时,我得到一个平面数组:

b = zerone("10???", [])
# => ["1", "0", "1", "1", "1", "1", "0", "1", "1", "0", "1", "0", "1", "0", "1", "1", "0", "1", "0", "0", "1", "0", "0", "1", "1", "1", "0", "0", "1", "0", "1", ...]

如果我更改最后一行,使方法返回 arr 而不调用 flatten,那么我会得到:

b = zerone("10????", [])
# => [
[
[
[["1", "0", "1", "1", "1", "1"], ["1", "0", "1", "1", "1", "0"]],
[["1", "0", "1", "1", "0", "1"], ["1", "0", "1", "1", "0", "0"]]
],
[
[["1", "0", "1", "0", "1", "1"], ["1", "0", "1", "0", "1", "0"]],
[["1", "0", "1", "0", "0", "1"], ["1", "0", "1", "0", "0", "0"]]
]
],
[
[
[["1", "0", "0", "1", "1", "1"], ["1", "0", "0", "1", "1", "0"]],
[["1", "0", "0", "1", "0", "1"], ["1", "0", "0", "1", "0", "0"]]
],
[
[["1", "0", "0", "0", "1", "1"], ["1", "0", "0", "0", "1", "0"]],
[["1", "0", "0", "0", "0", "1"], ["1", "0", "0", "0", "0", "0"]]
]
]
]
b.flatten(3)
# => [
["1", "0", "1", "1", "1", "1"],
["1", "0", "1", "1", "1", "0"],
["1", "0", "1", "1", "0", "1"],
["1", "0", "1", "1", "0", "0"],
["1", "0", "1", "0", "1", "1"],
["1", "0", "1", "0", "1", "0"],
["1", "0", "1", "0", "0", "1"],
["1", "0", "1", "0", "0", "0"],
["1", "0", "0", "1", "1", "1"],
["1", "0", "0", "1", "1", "0"],
["1", "0", "0", "1", "0", "1"],
["1", "0", "0", "1", "0", "0"],
["1", "0", "0", "0", "1", "1"],
["1", "0", "0", "0", "1", "0"],
["1", "0", "0", "0", "0", "1"],
["1", "0", "0", "0", "0", "0"]
]

这就是我想要的。谁能告诉我这是怎么回事?

最佳答案

您正在递归调用 zerone 并且 qs 会更新并且每次都不同。您不是在将苹果与苹果进行比较,方法正在做的事情以及您在 pry 动中手动做的事情(移除展平时)。

关于arrays - Flatten 在直接调用和在方法中调用时的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34956866/

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