【问题标题】:Populate a Ruby array like [a,a,a,a].. [f,f,f,f]填充像 [a,a,a,a].. [f,f,f,f] 这样的 Ruby 数组
【发布时间】:2015-06-29 03:17:07
【问题描述】:

我需要填充一个数组,但不是通过直接计算和拆分数字。

我需要生成以下内容:

[[a,a,a,a], [a,a,a,b], [a,a,a,c]..... [f,f,f,d], [f,f,f,e], [f,f,f,f]]

我很难理解它。我意识到它应该使用递归逻辑,但我不知道如何实际构建该方法。

【问题讨论】:

  • 你的意思是['a','a','a','a']等?
  • 另一种思考方式是,您以 6 为基数从 0 数到 6**4。

标签: arrays ruby recursion


【解决方案1】:

我会这样做:

('a'..'f').to_a.repeated_permutation(4).to_a
#=> returns 1296 different combination from ['a','a','a','a'] to ['f','f','f','f']

【讨论】:

  • 很多很好的答案,但这个答案也教会了我一个很酷的内置功能。
【解决方案2】:

这应该可行。

(0...6**4).map do |i|
  # Get as base 6 
  s = i.to_s(6).rjust(4,'0')

  # Convert numbers to letters
  s.gsub(/[012345]/,'0' => 'a', '1' => 'b', '2' => 'c', '3' => 'd', '4' => 'e', '5' => 'f')
end

【讨论】:

  • 您需要处理前导零。例如,s = 2.to_s(6) #=> "2"; "2".gsub(...) #=> "c"
【解决方案3】:

另一种方法:

('aaaa'..'ffff').map(&:chars)

【讨论】:

  • ('aa'..'bb').map(&:chars) #=> [["a", "a"], ["a", "b"], ["a", "c"], ["a", "d"], ["a", "e"], ["a", "f"], ["a", "g"], ["a", "h"], ["a", "i"], ["a", "j"], ["a", "k"], ["a", "l"], ["a", "m"], ["a", "n"], ["a", "o"], ["a", "p"], ["a", "q"], ["a", "r"], ["a", "s"], ["a", "t"], ["a", "u"], ["a", "v"], ["a", "w"], ["a", "x"], ["a", "y"], ["a", "z"], ["b", "a"], ["b", "b"]]测试!
  • @CarySwoveland 我想我没有注意到只使用从 A 到 F 的字母的要求......或者也许没有?
猜你喜欢
  • 2014-09-07
  • 2021-07-06
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多