doble [,], int [], bool [] & # 8230; matriz, extensiones de manipulación de vectores en C #
Pregunta
Necesito (para la creación rápida de prototipos e integración de bibliotecas) algo como esto (extensiones para matrices habituales)
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 tal cosa en alguna parte? ¿Puede que alguien lo haya implementado, así que no necesito hacerlo yo mismo?
Solución
Esto no debería ser demasiado difícil de escribir usted mismo.
Lo que hay que tener mucho cuidado es cómo las matrices se pueden editar como propiedades.
Algo así (código no probado muy tosco, pero debería darte una idea):
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
}
Luego extiendes la matriz:
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 );
}
}
Entonces puede confiar en el parámetro de tipo que se infiere.
Otros consejos
Los lenguajes como las listas de soporte de Python con tipos mixtos. Puede crear un script IronPython y luego llamarlo desde su aplicación C #. Siga este enlace para ver cómo puedes llamar al script IronPython desde tu aplicación.
Escribí Extensiones de matriz C # library a prueba de diseño de generación de código basado en extensiones.