dupla [,], int [], boleano [] ... matriz, as extensões de manipulação de vector em C #
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?
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
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.