比較してみた。随時更新する。
Rubyは 2.3.1、Railsは 4.2.6 を想定
データ構造
| データ構造名 |
Ruby実装 |
| 構造体 |
Struct,OpenStruct1
|
| シンボル |
Symbol, :STRING, String#to_sym |
| 文字列 |
String, "", %(), %Q(), '', %q() |
| 配列 |
Array, [], %w(), %W(), %i(), %I() |
| スタック |
Array |
| キュー |
Array, Queue |
| ハッシュテーブル |
Hash, {} |
| 複素数 |
Complex |
| 有理数(分数) |
Rational, 1/2r, 0.5r |
| 整数(31or62ビット幅) |
Fixnum, 1 |
| 整数(倍精度) |
Fixnum, 100000000000000000 |
| 浮動小数 |
Float, 0.5 |
| 集合 |
Set |
| 線形リスト |
acts_as_list(gem) |
| 木構造 |
rubytree(gem), act_as_tree(gem), closure_tree(gem) |
| グラフ |
|
正規表現
| 名 |
Ruby実装 |
| パターン |
%r{STRING} , Regexp , /String/ |
| マッチ |
Regexp#match , String#match , =~ |
| キャプチャ |
Regexp#capture |
| 最後に成功した文字列 |
$&, Regexp.last_match[0] |
文字列操作
| 名 |
Ruby実装 |
ActiveSupport |
| 文字コード |
String#bytes,String#ord,String#getbyte |
|
| 16進→10進 |
String#hex |
|
| 文字列長 |
String#length, String#size |
|
| 反転 |
String#reverse |
|
| 結合 |
Array#join, String#+, String#<< |
|
| 走査 |
String#scan |
|
| 文字置換 |
String#tr |
|
| 文字列置換 |
String#sub, String#gsub |
|
| 文字取得 |
String#[] |
String#at |
| 部分文字列 |
String#[],String#slice |
String#from,String#to,String#first,String#last |
| バイト切り出し |
String#byteslice |
|
| 打ち切り |
String#[0,size], String#slice(0,size) |
String#truncate |
| 置き換え |
String#replace |
|
日付
| 名 |
Ruby実装 |
ActiveSupport |
| 現在日時 |
Time.now, Time.new, Time#to_date2
|
Time.zone.now |
| n秒後 |
Time#+ |
n.seconds.since |
| n秒前 |
Time#- |
n.seconds.ago |
| 現在日 |
Date.today, Date.new2
|
|
| 昨日 |
Date.new - 1 |
Date.new.yesterday |
| 明日 |
Date.new + 1 |
Date.new.tomorrow |
| n日後 |
Date#+2
|
n.days.since, Date#since(n.days) |
| n日前 |
Date#-2
|
n.days.ago |
| n月後 |
Date#>>2
|
n.months.since |
| n月前 |
Date#<<2
|
n.months.ago |
整数
| アルゴリズム名 |
Ruby実装 |
| 最大公約数 |
Integer#gcd |
| 最小公倍数 |
Integer#lcm |
| 素因数分解 |
Integer#prime_division / Prime#prime_division |
| 素数 |
Integer.each_prime / Prime.each |
| 絶対値 |
Numeric#abs |
| 丸め |
Numeric#round |
| 商 |
Numedic#div |
| 余り |
Numeric#modulo |
| 自身より大きな整数で最小のもの |
Numeric#ceil |
| 自身より小さな整数で最大のもの |
Numeric#floor |
算術
| アルゴリズム名 |
Ruby実装 |
| 対数 |
Math.log |
| 指数関数 |
Math.exp |
| 円周率 |
Math.PI |
| 正弦(sin) |
Math.sin |
| 余弦(con) |
Math.cos |
| xの正接(tan) |
Math.tan |
| xの逆正接(atan) |
Math.atan |
| 対数 |
Math.log |
| 常用対数 |
Math.log10 |
| 二進対数 |
Math.log2 |
| ガンマ関数 |
Math.gamma |
| 直行する2辺の斜辺(対角線) |
Math.hypot |
乱数
| アルゴリズム名 |
Ruby実装 |
| メルセンヌ・ツイスタ(MT19937) |
Random |
| 安全な乱数発生器3
|
SecureRandom |
組み合わせ
| アルゴリズム名 |
Ruby実装 |
| 順列 |
Array#permutation |
| 重複順列 |
Array#repeated_permutation |
| 組合せ |
Array#combination |
| 重複組合せ |
Array#repeated_combination |
ソート
| アルゴリズム名 |
Ruby実装 |
| ソート |
Array#sort |
探索
| アルゴリズム名 |
Ruby実装 |
| 繰り返し |
Enumerable |
| 繰り返し(遅延評価) |
Enumerable#lazy |
| 二分探索 |
Array#bsearch |
| 幅優先 |
|
| 深さ優先 |
|
| 反復進化深さ優先 |
|
| 深さ制限 |
|
| 双方向 |
|
| 均一コスト |
|
| ダイクストラ |
dijkstraruby(gem) |
| クラスカル |
kruskal(gem) |
| 最近傍 |
|
| プリム |
|
| トポロジカルソート |
tsortライブラリ |
| 最良優先探索 |
|
| A* |
|
敵対検索
| アルゴリズム名 |
Ruby実装 |
| ミニマックス法 |
|
| アルファ・ベータ法 |
|
| 分枝限定法 |
|
集合
暗号、ハッシュ関数
| アルゴリズム名 |
Ruby実装 |
| AES |
OpenSSL::Cipher::AES |
| AES(128bit長) |
OpenSSL::Cipher::AES128 |
| AES(192bit長) |
OpenSSL::Cipher::AES192 |
| AES(256bit長) |
OpenSSL::Cipher::AES256 |
| BlowFish |
OpenSSL::Cipher::BF |
| CAST5 |
OpenSSL::Cipher::CAST5 |
| DES |
OpenSSL::Cipher::DES |
| IDEA |
OpenSSL::Cipher::IDEA |
| RC2 |
OpenSSL::Cipher::RC2 |
| RC4 |
OpenSSL::Cipher::RC4 |
| RC5 |
OpenSSL::Cipher::RC5 |
| PKCS#7 |
OpenSSL::PKCS7 |
| DSS |
OpenSSL::Digest::DSS |
| DSS1 |
OpenSSL::Digest::DSS1 |
| MD2 |
OpenSSL::Digest::MD2 |
| MD4 |
OpenSSL::Digest::MD4 |
| MD5 |
OpenSSL::Digest::MD5 |
| SHA |
OpenSSL::Digest::SHA |
| SHA1 |
OpenSSL::Digest::SHA1 |
| SHA224 |
OpenSSL::Digest::SHA224 |
| SHA256 |
OpenSSL::Digest::SHA256 |
| SHA384 |
OpenSSL::Digest::SHA384 |
| SHA512 |
OpenSSL::Digest::SHA512 |