Ruby嵌套while循环提前停止

Ruby嵌套while循环提前停止,ruby,loops,Ruby,Loops,在尝试遍历字母表数组并生成所有6个字符的纯alpha字符串时,我的迭代似乎在最内部嵌套循环的单个while循环之后结束。代码如下。想法 编辑:我也很可能忽略了一种更简单的方法来达到预期的效果。如果是这样,请随时纠正我。这是否符合您的要求?它将生成所有唯一的排列,但不会像aabb中那样重复字符 ('a'..'z').to_a.permutation(6).to_a 以下是一个简短的版本,用于演示: res = ('a'..'c').to_a.permutation(2).to_a res #

在尝试遍历字母表数组并生成所有6个字符的纯alpha字符串时,我的迭代似乎在最内部嵌套循环的单个while循环之后结束。代码如下。想法


编辑:我也很可能忽略了一种更简单的方法来达到预期的效果。如果是这样,请随时纠正我。

这是否符合您的要求?它将生成所有唯一的排列,但不会像aabb中那样重复字符

('a'..'z').to_a.permutation(6).to_a
以下是一个简短的版本,用于演示:

res = ('a'..'c').to_a.permutation(2).to_a 
res # => [["a", "b"], ["a", "c"], ["b", "a"], ["b", "c"], ["c", "a"], ["c", "b"]]

这是你想要的吗?它将生成所有唯一的排列,但不会像aabb中那样重复字符

('a'..'z').to_a.permutation(6).to_a
以下是一个简短的版本,用于演示:

res = ('a'..'c').to_a.permutation(2).to_a 
res # => [["a", "b"], ["a", "c"], ["b", "a"], ["b", "c"], ["c", "a"], ["c", "b"]]
在我的计算机上分配内存失败

[*?a..?z].repeated_permutation(2).to_a.map &:join
工作正常

好的,重复排列后调用a是错误的,它是这样工作的:

[*?a..?z].repeated_permutation( 6 ).each { |permutation| puts permutation.join }
在我的计算机上分配内存失败

[*?a..?z].repeated_permutation(2).to_a.map &:join
工作正常

好的,重复排列后调用a是错误的,它是这样工作的:

[*?a..?z].repeated_permutation( 6 ).each { |permutation| puts permutation.join }

为了进一步说明Ruby

loop.inject 'aaaaaa' do |memo|
  puts memo
  break if memo == 'zzzzzz'
  memo.next
end
或者简单地说:

( 'aaaaaa'..'zzzzzz' ).each &method( :puts )

为了进一步说明Ruby

loop.inject 'aaaaaa' do |memo|
  puts memo
  break if memo == 'zzzzzz'
  memo.next
end
或者简单地说:

( 'aaaaaa'..'zzzzzz' ).each &method( :puts )


哦我的上帝谁说过你可以用任何语言编写FORTRAN的那句令人难忘的话?还是因为语言?嘿,伙计们,但至少他试过了您的代码没有按您希望的方式工作,因为您没有在外部循环的每次迭代中重置循环迭代器x1-x6。将x2=0移动到分配到y1之后,同样地,对于所有其他的,它将工作。哦。我的上帝谁说过你可以用任何语言编写FORTRAN的那句令人难忘的话?还是因为语言?嘿,伙计们,但至少他试过了您的代码没有按您希望的方式工作,因为您没有在外部循环的每次迭代中重置循环迭代器x1-x6。将x2=0移动到赋值后的y1,同样地,对于所有其他的赋值,它都会工作。当我运行此操作时,我得到:generate.rb:1:NoMethodError6的未定义方法“repeated_permutation”太多,只需计算24**6=>191102976@natosennimi:您使用的是什么Ruby版本?最后一个版本提供了所需的结果。由于某些原因,1和2不能在我的Mac电脑上运行,但必须在Ubuntu机器上正确运行。如果你有时间的话,你能简单地解释一下为什么我的原作如此笨拙、混乱,却不起作用吗?编辑:在我的Mac上使用ruby 1.8.7,在远程Ubuntu机器上使用ruby 2.0.0p0。我认为这是因为你只在宇宙飞船的开头用零初始化x1..x6,而你应该在每个嵌套循环的开头初始化它们。当我运行这个时,我得到:generate.rb:1:未定义的方法'repeated_permutation'对于NoMethodError6来说太多了,只需计算24**6=>191102976@natosennimi:您使用的是什么Ruby版本?最后一个版本提供了所需的结果。由于某些原因,1和2不能在我的Mac电脑上运行,但必须在Ubuntu机器上正确运行。如果你有时间的话,你能简单地解释一下为什么我的原作如此笨拙、混乱,却不起作用吗?编辑:Mac上的ruby 1.8.7和远程Ubuntu机器上的ruby 2.0.0p0。我认为这是因为你只在宇宙飞船的开头用零初始化x1..x6,而你应该在每个嵌套循环的开头初始化它们。几乎,但是的,我试着包含两个字符。无论如何,谢谢。差不多了,但是是的,我试着加入双重字符。无论如何谢谢你,呼!从未见过这样的风格。。。第二个很好:从32行丑陋到1行简单。我喜欢它。请注意,Boris的另一个答案要好得多,因为这只适用于小写字母。或者只使用大写字母,但不使用both@padde:或带大写字母“aaaaa”…“zzzz”。或者用骆驼壳:“aaaaa”…“zzzz”。红宝石核心队肯定喜欢打球。呼!从未见过这样的风格。。。第二个很好:从32行丑陋到1行简单。我喜欢它。请注意,Boris的另一个答案要好得多,因为这只适用于小写字母。或者只使用大写字母,但不使用both@padde:或带大写字母“aaaaa”…“zzzz”。或者用骆驼壳:“aaaaa”…“zzzz”。Ruby核心团队当然喜欢玩。