3

私は現在、C# でマトリックスの実装に取り​​組んでいます。それはどのように sth についての問題ではありません。動作するか、sth する必要があります。似ている。それは「デザイン部分」に関するものです...だから、行列を転置する関数を実装したいと思います( http://en.wikipedia.org/wiki/Transpose )。簡単なことだと思いましたが、どの実装方法が最もエレガントかを選択するのは本当に難しいです。

しかし、ここでは最初にマトリックス クラスのビット コードを示します。

namespace Math
{
    public class Matrix
    {
        protected double[,] matrix;

        public Matrix(byte m, byte n)[...]
        public Matrix(Matrix matrix)[...]

        public byte M { get; private set; }
        public byte N { get; private set; }

        // Possibility 1 (changes the matrix directly)
        public void Transpose()[...]

        // Possibility 2 (getter method)
        public Matrix GetTransposed()[...]

        // Possibility 3 (property)
        public Matrix TransposedMatrix
        {
            get[...]
        }

        // Possibility 4 (static method; a bit like an operator)
        public static Matrix Transpose(Matrix matrix)[...]
    }
}

ここでは、さまざまな可能性をどのように使用するかを示します。

namespace MathTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a new matrix object...
            var mat1 = new Math.Matrix(4, 4);

            // Using possibility 2 (getter method, like "GetHashCode()" or sth. similar)
            var mat2 = mat1.GetTransposed();

            // Using possibility 3 (the transposed matrix is a property of each matrix)
            var mat3 = mat1.TransposedMatrix;

            // Using possibility 4 (definition and use is like an unary operator)
            var mat4 = Math.Matrix.Transpose(mat1);

            // Using possibility 1 (changes the matrix directly)
            mat1.Transpose();
        }
    }
}

あなたはどちらの方法を好みますか、またその理由は何ですか? または、行列の転置を実装するさらに良い方法はありますか?

どうもありがとうございました!

ベンジャミン

4

1 に答える 1