LoginSignup
3
1

More than 5 years have passed since last update.

Vectorクラスをカジュアルに使っていく

Posted at

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
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1