12

20

[Ruby] 複数のMatrixからMatrixをコンストラクトする

2012.12.20(06:57)

Matrixクラスを拡張し、MatrixのArrayを縦方向に並べた大きなMatrixを作るコンストラクタを追加してみた。
Rubyでは既存のクラスを継承しないでそのまま拡張する方法が用意されている。
class Matrix
  # Matrixの配列を縦方向(行が増える方向)に連結して大きなMatrixを一つ作る
  # @param [Array] 連結したいMatrixが入っている配列
  # @param [Object] 不足する桁に埋めるオブジェクト
  # @return [Matrix] 連結したMatrix
  def Matrix.row_matrixes(matrix_array, obj = nil)
    raise "type error #{matrix_array.class}" if ! matrix_array.is_a?(Array)
    # 与えられたMatrixのうち最大の桁数を求める
    column_size_max = matrix_array.map{|m| m.column_size}.max
    merged_array = Array.new
    matrix_array.each { |m|
      column_size = m.column_size
      matrix_contents_array = m.to_a
      matrix_contents_array.each { |row|
        # 桁数が足りないものは桁を追加する
        (column_size_max - column_size).times {
          row << obj
        }
        merged_array << row
      }
    }
    new merged_array
  end
end
横方向に並べて大きなMatrixを作る必要性がいまのところないので、それはまた今度。
プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示