gpt4 book ai didi

ruby - 为什么这个循环不停止?

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:01 27 4
gpt4 key购买 nike

我正在尝试获取字符串“xxxyyyzzz”并将其拆分为一个包含相同字母的数组。所以我希望输出为 ["xxx","yyy","zzz"]。我不确定为什么这段代码一直在循环。有什么建议吗?

def split_up(str)
i = 1
result = []
array = str.split("")
until array == []
if array[i] == array[i-1]
i += 1
else
result << array.shift(i).join("")
end
i = 1
end
result
end

puts split_up("xxxyyyzzz")

最佳答案

循环是因为您的 until 条件永远不会退出。当连续字符匹配时,您正在递增 i,但在循环结束时,您将 i 重置为 1

如果您编辑此部分并添加此行:

until array == []
puts i # new line

然后你会看到i总是1,并且代码一直打印1

删除 i = 1 行,你会得到你想要的结果。

此外,您可能有兴趣阅读 Ruby 字符串 scan 方法、模式匹配和捕获组,以及使用前瞻和后视零长度断言,它可以匹配边界.

以下是我个人将如何在字母边界处拆分字符串:

"xxxyyyzzz".scan(/(.)(\1*)/).map{|a,b| a+b }
=> ["xxx", "yyy", "zzz"]

scan 方法是这样做的:

  1. . 匹配任何字符,例如“x”,括号中包含了这一点。
  2. \1* 匹配前一次捕获任意次数,例如“xx”,括号中包含此内容。
  3. 因此 $1 匹配第一个字符“x”,$2 匹配所有重复的“xx”。

扫描 block 连接第一个字符及其重复,因此返回“xxx”。

关于ruby - 为什么这个循环不停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27715519/

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