arrays - ruby - 如何生成给定长度的字母和数字的每种组合的数组?

标签 arrays ruby

我正在尝试创建一个脚本来生成一个数组,该数组列出了用户提供的一定长度的字母和数字(最终是符号)的每个重复排列。例如:

User input: 4
Output:
a
b
...
zzzy
zzzz

我尝试了多种方法来实现此目的,并通过在包含 a-z 和 0-9 的数组上嵌套 .each 循环获得了我正在寻找的效果。

alphanum.each do |s|
  output << s
  alphanum.each do |t|
    output << s + t
    alphanum.each do |r|
      output << s + t + r
      alphanum.each do |i|
        output << s + t + r + i
      end
    end
  end
end

但是,这不能通过输入来确定,并且对我来说似乎效率不高或没有 ruby 风格。我尝试了各种其他循环组合,但似乎都不起作用。一个例子:

# User input
puts "Max length: "
input = gets.chomp
length = input.to_i

# Iterates over the array
length.times do
  modded.each do |s|
    alphanum.each do |t|
      r = s + t
      puts r # To test output
      modded << r
    end
  end
end

这会输出诸如 aaaaaaaaaaaaa1 之类的内容以及其他长度输入仅为 1 或 2 的废话。我该如何完成此操作?

最佳答案

alphanum = [*?a..?z, *?0..?9]
length.times.flat_map { |l|
  alphanum.repeated_permutation(l + 1).map(&:join)
}

请注意,length > 3 将为您提供很多结果。

编辑:正如 meagar 所说,这非常占用内存。基于枚举器的答案(不太漂亮,但不会破坏你的内存):

e = Enumerator.new do |y|
  length.times do |l|
    alphanum.repeated_permutation(l + 1).each do |p|
      y << p.join
    end
  end
end

关于arrays - ruby - 如何生成给定长度的字母和数字的每种组合的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253805/

相关文章:

c++ - 如何帮助编译器消除循环和数组?

php - 来自 SQL 的多维 PHP 数组,用于 json_encode

regex - 使用数组中的元素快速搜索文件的 Perl 习惯用法

ruby - Sinatra 部分数据?

c# - Ruby - 枚举文件

ruby - Ruby 中的时区选择列表(按 UTC 偏移量)

ruby - 安装的 gem 比源慢得多

c++ - Visual C++ 6.0 中 "unsigned char"数组的最大允许大小是多少?

javascript - 如果数组中没有字符串则返回 0 - JS

ruby-on-rails - 如何对 quickbooks-ruby 进行故障排除