Ruby の標準ライブラリのなかの Vector クラスがとても便利なのですが、利用の機会が少ないようなので、もっと気軽に使っていく例を紹介します。
例1. 普通に計算が面倒なときに使う
まず require "matrix"
します。このなかに Vector クラスが入ってます。
で、配列の同じインデックスの要素をそれぞれ足したい場合、
[1, 2] + [3, 4] + [5, 6] # => [1, 2, 3, 4, 5, 6]
とするのは、単に配列同士が繋がってしまいます。
そこで次のようにしてもいいのですが、
[[1, 2], [3, 4], [5, 6]].transpose.map(&:sum) # => [9, 12]
Vector を使うとより自然に表現できます。
Vector[1, 2] + Vector[3, 4] + Vector[5, 6] # => Vector[9, 12]
例2. 座標として使う
二次元座標なら、
a = Vector[1, 2]
b = Vector[3, 4]
a + b # => Vector[4, 6]
三次元座標なら、
a = Vector[1, 2, 3]
b = Vector[3, 4, 5]
a + b # => Vector[4, 6, 8]
a + b
の部分は同じというところがポイントです。
例3. Railsアプリのデバッグ中に使う
まとめて引き算もできるので、関連テーブルのレコード数の変化をさっと確認したいときなど、次のように簡単に書けます。
a = Vector[User.count, Article.count, Favorite.count, Community.count]
# (ここで何か実行)
b = Vector[User.count, Article.count, Favorite.count, Community.count]
p b - a