double [,], int [], bool [] & # 8230; matrice, extensions de manipulation de vecteurs en C #

StackOverflow https://stackoverflow.com/questions/1421125

  •  07-07-2019
  •  | 
  •  

Question

J'ai besoin (pour le prototypage rapide et l'intégration de bibliothèques) de ce genre (extensions pour les tableaux habituels)


double[] d;
d.SetRow(1,{ 1.1 , 2.0 ,3.3});
var r = d.GetRow(1);
d = d.AppendRight(new int[]{1,2,3});
...

Existe-t-il une telle chose n'importe où? Quelqu'un peut-il le mettre en œuvre et je n'ai donc pas besoin de le faire moi-même?

Était-ce utile?

La solution

Cela ne devrait pas être trop difficile à écrire vous-même.

Ce qu'il faut faire très attention, c'est comment les tableaux peuvent être édités en tant que propriétés.

Quelque chose comme (code très brut non testé, mais devrait vous donner une idée):

public class ArrayRow<T> {
    //add your own ..ctor etc

    T[,] matrix; //don't make this public see http://msdn.microsoft.com/en-us/library/k2604h5s.aspx
    public int Index { get; private set; }

    //note that this will be a copy
    public T[] GetValues() {
        T[] retval = new T[matrix.GetLength(1)];
        for ( int i = 0; i < retval.Length; i++ )
           retval[i] = matrix[Index, i];

        return retval;
    }

    public void SetValues(T[] values)
    //..and so on, you get the idea
}

Ensuite, vous étendez le tableau:

public static ArrayExtensions {

    public void SetRow<T> ( this T[,] matrix, int rowIndex, T[] values ) {
        //check rowIndex in range and array lengths match
    }

    public ArrayRow<T> GetRow<T> ( this T[,] matrix, int rowIndex ) {
        //check rowIndex in range
        return new ArrayRow<T> ( matrix, rowIndex );
    }
}

Ensuite, vous pouvez compter sur le paramètre de type inféré.

Autres conseils

Consultez Math.NET . C'est une bibliothèque mathématique open-source. Vous trouverez probablement ce dont vous avez besoin.

Ils ont un exemple utilisant une matrice à la fin de cette page .

Des langages tels que Python supportent les listes avec des types mixtes. Vous pouvez créer un script IronPython, puis l'appeler à partir de votre application C #. Suivez ce lien pour savoir comment appeler un script IronPython depuis votre application.

J'ai écrit les extensions Matrix de la bibliothèque C # à tester la conception de la génération de code basée sur les extensions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top