なんじゃくにっき2

プログラミングの話題中心。たまにゲームの話とか。

よく忘れるRubyの基本的記法

個人用メモ。 ※見てくれる人が多いようなので追記しました。 そのうちまた追記します

リテラル

詳しくはドキュメント読みましょう http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fliteral.html

Stringの配列
%w(a b)   # ["a", "b"]
%w|a b|   # ["a", "b"] 区切り文字は()以外にも<>とか[]とか||でも
Stringの配列で式展開(W大文字)
c="CCC"
%W|a b #{c}|     # ["a", "b", "CCC"]
Symbolの配列
%i(a b)   # [:a, :b]
Symbolの配列でも式展開できる
c="CCC"
%I|a b #{c}|     # [:a, :b, :CCC]
正規表現
/Ruby/i     # 大文字小文字区別しない

String

1文字
?a    # "a"
普通の式展開
x = "fuga"
"hoge #{x}"    # "hoge fuga"
sprintfっぽい式展開
x = "fuga"
y = 100

"hoge %s" % x    # "hoge fuga"
"hoge %s %i" % [x, y]    # "hoge fuga 100"  複数もいけるで!
Hashも展開できる

"Hello %{name} !" % {name: "world"} # "Hello world!"

書式指定もできる

"%{year}-%02d-%02d" % {year: 1970, month: 1, day: 1} # "1970-01-01"

Array

積集合
[1, 3, 5, 7, 9] & [1, 2, 3, 4, 5]   # [1, 3, 5]
headとtailに分解
head, *tail = [1, 2, 3]
head  # 1
tail  # [2, 3]
zip, transpose
[1, 2, 3].zip [4, 5, 6] # [[1, 4], [2, 5], [3, 6]]
arr1, arr2 = [[1, 4], [2, 5], [3, 6]].transpose
arr1   # [1, 2, 3]
arr2   # [4, 5, 6]
組み合わせ
[1, 2, 3, 4].combination(2).sort_by{|item| [item[0], item[1]]}
# combinationは順番保証しないことになっているので適宜sort_by

Enumerable

each_slice

(1..7).each_slice(3).to_a # [[1, 2, 3], [4, 5, 6], [7]]