maeshimaの日記

メモ書きです

Arrayその5

Array#transpose

二次元配列に対して使うメソッド。行と列を転置する。

a = [[1,2],[3,4],[5,6]]
a.transpose # => [[1, 3, 5], [2, 4, 6]]

似たようなものに Enumerable#zip がある。これは配列の引数とって足してから行と列を転置するメソッド。

b = [1,2]
c = [3,4]
d = [5,6]
b.zip(c,d) # => [[1, 3, 5], [2, 4, 6]] 

Array#values_at

引数で指定された位置の要素を含む配列を返す。とびとびの要素を取得することが出来る。

a = %w{ a b c d e f }
a.values_at(1, 3, 5) # => ["b", "d", "f"]
a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
a.values_at(-1, -3, -5, -7) # => ["f", "d", "b", nil]
a.values_at(1..3, 2...5) # => ["b", "c", "d", "c", "d", "e"]

Array#insert

第一引数が負の数でなければ、第二引数以降の要素を第一引数の数の直前に挿入。負の場合は末尾から数えた要素の直後に挿入する。

a = %w{ a b c d }
a.insert(2, 99) # => ["a", "b", 99, "c", "d"]
a.insert(-2, 1, 2, 3) # => ["a", "b", 99, "c", 1, 2, 3, "d"]
a.insert(-1, "e") # => ["a", "b", 99, "c", 1, 2, 3, "d", "e"]

Array#cycle

要素を引数に渡された数だけ繰り返すeach的なメソッド。ブロック引数渡さない場合はEnumeratorオブジェクトを返す。引数渡さないときは無限回繰り返す。

[1,2,3].cycle(3) do |i| print i; end
# => 123123123