double [,], int [], bool [] & # 8230; matrice, estensioni di manipolazione vettoriale in C #
Domanda
Ho bisogno di (per la prototipazione rapida e l'integrazione delle librerie) qualcosa del genere (estensioni per le normali matrici)
double[] d;
d.SetRow(1,{ 1.1 , 2.0 ,3.3});
var r = d.GetRow(1);
d = d.AppendRight(new int[]{1,2,3});
...
Esiste qualcosa del genere ovunque? Qualcuno potrebbe averlo implementato, quindi non ho bisogno di farlo anch'io per me?
Soluzione
Non dovrebbe essere troppo difficile scrivere te stesso.
La cosa di cui bisogna fare molta attenzione è come gli array possono essere modificati come proprietà.
Qualcosa di simile (codice non testato molto approssimativo, ma dovrebbe darti un'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
}
Quindi estendi l'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 );
}
}
Quindi puoi fare affidamento sul parametro type inferito.
Altri suggerimenti
Dai un'occhiata a Math.NET . È una libreria matematica open source. Probabilmente troverai quello che ti serve.
Lingue come Python supportano elenchi con tipi misti. È possibile creare uno script IronPython e quindi chiamarlo dall'applicazione C #. Segui questo link per sapere come chiamare lo script IronPython dalla tua app.
Ho scritto Extrix Matrix libreria C # su progettazione di generazione di codice basata su estensioni di test.