0

このシーケンスをルビーで構築する方法は?

{
"0" => "00000",
"1" => "00001",
"2" => "00002",
"3" => "00003",
"4" => "00010",
"5" => "00011",
"6" => "00012",
....
"1020" => "33330",
"1021" => "33331",
"1022" => "33332",
"1023" => "33333"
}
4

4 に答える 4

2

できるよ:

nums = Hash.new
0.upto(1023){ |x| nums[x] = x.to_s(4) }
puts nums

基本的に Fixnum.to_s(4) は、基数 10 の数値を基数 4 に変換します。

更新 - ワンライナーとして

ワンライナーが必要な場合は、次のことができます。

puts (0..1023).inject({}){ |hash, e| hash[e] = e.to_s(4); hash }
于 2012-09-13T15:41:25.900 に答える
1
nums = Hash.new { |h, k| "%05d" % Integer( k ).to_s( 4 ) rescue nil }
于 2012-09-13T15:58:43.337 に答える
0

完全な規則性を考えると、それをハッシュとして保持する必要はないと思います。むしろ、メソッドでそれを行う必要があります。

class String
  def quaternary
    to_i.tap{|i| return unless 0 <= i and i <= 1023}.to_s(4).rjust(5, "0")
  end
end

"5".quarternary # = > "00011"
于 2012-09-14T01:02:14.627 に答える
0
Hash[1024.times.map {|n| [n.to_s, format('%05d', n.to_s(4))] }]
于 2012-09-13T23:00:53.477 に答える