doble [,], int [], bool [] & # 8230; matriz, extensiones de manipulación de vectores en C #

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

  •  07-07-2019
  •  | 
  •  

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?

¿Fue útil?

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

Eche un vistazo a Math.NET . Es una biblioteca matemática de código abierto. Probablemente encontrará lo que necesita.

Tienen un ejemplo usando una matriz al final de esta página .

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top