dupla [,], int [], boleano [] ... matriz, as extensões de manipulação de vector em C #

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

  •  07-07-2019
  •  | 
  •  

Pergunta

Eu preciso (para prototipagem rápida e bibliotecas de integração) algo como isto (extensões para matrizes usuais)


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

não existe tal coisa em qualquer lugar? Em pode ser qualquer pessoa implementado, então eu não preciso de fazer eu para mim mesmo?

Foi útil?

Solução

Este não deve ser muito difícil de escrever-se.

A coisa que ter muito cuidado de é como matrizes podem ser editados como propriedades.

Algo como (código não testado muito áspera, mas deve dar-lhe uma idéia):

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
}

Em seguida, você estender o array:

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 );
    }
}

Em seguida, você pode contar com o tipo de parâmetro a ser inferida.

Outras dicas

Tenha um olhar em Math.NET . É uma biblioteca de matemática de código aberto. Você provavelmente vai encontrar o que você precisa.

Eles têm um exemplo usando uma matriz no final deste página .

Linguagens como listas de apoio Python com tipos mistos. Você pode criar um script de IronPython e então chamá-lo de seu aplicativo C #. Siga este link para ver como você pode chamar script de IronPython de seu aplicativo.

Eu escrevi Matrix extensões C # biblioteca para extensões de teste projeto de geração de código base.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top