double [,], int [], bool [] & # 8230; matrice, extensions de manipulation de vecteurs en C #
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?
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
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.