gpt4 book ai didi

ruby 1.9 错误? -- 数组排列

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:39 26 4
gpt4 key购买 nike

在尝试 Euler 项目的问题 41 时,我遇到了似乎是 Array.permutation 的 Ruby 1.9 实现中的错误。这是隔离的问题代码:

n = 4
slice = '987654321'.chars.to_a[-n..-1]
puts "slice = #{slice.join}"
slice.permutation(n) {|perm| puts perm.join}

slice2 = slice.dup
puts "slice2 = #{slice2.join}"
slice2.permutation(n) {|perm| puts perm.join}

slice3 = []
(0...n).each {|i| slice3[i] = slice[i]}
puts "slice3 = #{slice3.join}"
slice3.permutation(n) {|perm| puts perm.join}

slice 和 slice2 的输出是:

slice = 4321
9876
9867
9786
9768
9687
...

然而,slice3 是正确的,数字 1 到 4 被置换。 n = 4 也是第一个出现此问题的值。当我设置 n = 3 时,我得到了预期的输出。这是一个错误,还是我写错了什么?快速 Google 搜索没有找到任何结果。

最佳答案

这是一个known bug已在 1.9.2p136 及更新版本中修复。

除了更新到更新的 Ruby 之外,最简单的解决方法是确保您的数组不“共享”,或者通过构建一个新数组(比如您的 slice3),或者简单地“修改”它,例如切片 += []

关于 ruby 1.9 错误? -- 数组排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524215/

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