Ruby関連

提供: 文具堂 Wiki三昧
移動先: 案内検索

rbenv

Rubyバージョン指定
rbenv global 2.3.1

Rubyインストール
rbenv install 2.3.1

Rubyインストール バージョンリスト
rbenv install -l
rbenv install --list

Rubyインストール バージョンリスト更新
cd .rbenv/plugins/ruby-build
git pull

Hash

デフォルトで新しいArrayを返すHash

h = Hash.new{|hash, key| hash[key] = []}

デフォルトで0を返すHash

h2 = Hash.new{|a, k| a[k] = 0}

文字

"a".ord
=> 97
97.chr
=> "a"

ASCIIの印字可能文字 (0x20-0x7e)
(0x20..0x7e).map{|i| i.chr}.join
=> " !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

"黒".ord
=> 40658

40658.chr
RangeError: 40658 out of char range

40658.chr(Encoding::UTF_8)
40658.chr("utf-8")
40658.chr("UTF-8")
=> "黒"

Time

基本

Time.now.to_i
=> 1389599770

Time.at(1389599770)
=> 2014-01-13 16:56:10 +0900

Time.local(2014, 3, 22)
=> 2014-03-22 00:00:00 +0900

Time.utc('2014', '3', '22')
=> 2014-03-22 00:00:00 UTC

strftime

strftime - convert date and time to a string

Time.now.strftime("%Y/%m/%d %X")
=> "2014/01/13 16:24:14"

> DateTime.now.strftime("Date: %a, %d %b %Y %X %z")
=> "Date: Sun, 04 Sep 2016 11:08:42 +0900"

IPアドレス

IPアドレス16進数文字列から4オクテット毎の10進数文字列へ変換

["c0a80516"].pack("H8").unpack("C4").map{|o| o.to_s}.join(".")
=> "192.168.5.22"

サブネットマスクをビットマスクに変換

"255.255.255.240".split(".").map{|m| m.to_i}.pack("C4").unpack("B*").first.gsub("0", "").size
=> 28 # /28

ビットマスクをサブネットマスクに変換

lambda{|x| [("1"*x + "0"*(32-x))].pack("B*").unpack("C4")}.call(28).join(".")
=> "255.255.255.240"

何ビット立っているかカウント
def countbits(bits)
  bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555)
  bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333)
  bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f)
  bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff)
  (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff)
end